行,我有一个表,用户可以追加一行如下:数据装入附加行表使用Ajax和Json的
// Append New Row To Email Change Form //
$(function() {
var count = 1000;
$('#AddRow').click(function() {
$('table.subgrid tbody').append('<tr><td><input type="hidden" name="delete[]" value="No">No</td><td><input type="text" name="customernumber[]" id="' + count + '_cust" onChange="ajax_customer_info(' + count + ')" maxlength="6" /></td><td><span id="' + count + '_name"></span></td><td><select name="type[]"><option value="A">ACH</option><option value="C">Credit</option><option value="I">Invoice</option><option value="S">Statement</option></select></td><td><select name="deliverymethod[]"><option value="E">Electronic</option><option value="P">Print</option></select></td><td><input size="40" type="text" class="fieldname" maxlength="50" name="newemailaddress[]" /><input type="hidden" name="oldemailaddress[]" /><input type="hidden" name="companyid[]" value="1" /><input type="hidden" name="action[]" value="add" /></td></tr>');
count++;
});
});
在这一行中,他们可以输入一个客户号码,通过ajax应该自动返回客户名称。这里是阿贾克斯:
function ajax_customer_info(row) {
xmlHttp=GetXmlHttpObject();
if (xmlHttp!=null) {
var url="/hq/servlet/customerinfo";
url=url+"?customernumber="+document.getElementById(row+"_cust").value;
url=url+"&sid="+Math.random();
xmlHttp.onreadystatechange=function(row) {
if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete") {
xmlDoc=xmlHttp.responseXML;
var data = JSON.parse(xmlHttp.responseText);
document.getElementById(row+"_name").innerHTML=data.name;
}
}
xmlHttp.open("GET",url,true);
xmlHttp.send(null);
}
}
问题是这不填充客户名称。我发现,如果我删除行+在此:
document.getElementById(row+"_name").innerHTML=data.name;
而且具有发言权替换它(“名称”),当然改变对应ID,在所附的排它工作的地方。但是,我需要唯一的ID,因为用户可以追加多行。有人可以告诉我我在做什么错吗?谢谢!
为什么在页面上已经有jQuery的时候使用自定义的ajax方法,该页面上有很好的$ .ajax()函数可供使用? – Dogoku 2013-03-08 23:42:22
我不知道这是否是问题的原因,但是您的id属性不应以数字开头。它必须以角色开始。所以试着给这个元素id id =“cust_'+ count +''' – Steve 2013-03-08 23:42:43
@Dogoku好问题,我唯一给你的答案是我对ajax一般都比较陌生,并且不热衷于遵循所有最佳实践。我会仔细看看的。如果你喜欢它,你能给我一个例子,说明如何使用$ .ajax函数来实现上述功能吗? – Tmac 2013-03-09 00:21:19