我遇到以下代码的问题,我不确定原因。
情景摘要:
基本上我有一个包含几个输入字段的页面用于内联编辑,每当填充每个输入字段,模糊或按回车时,都会调用javascript函数执行以下操作:
问题:
如果用户一次编辑1个输入字段,则上述工作完全正常,但是当用户编辑第二个字段而第一个字段仍在“加载”时,javascript会“丢失”,当第一个AJAX请求完成时, “loading”仍然存在,但在第二个上它被正确替换。
下面是javascript代码,我相信JS混淆与“nearestTd”有关,就好像jquery'忘记'old nearestTd(从第一次调用),只有'记住'新的...有什么建议吗?
function action_addSystemCountryLanguageField (event) {
value = $(event.target).val();
nearestTd = $(event.target).closest('td');
var loading=nearestTd.html("<div align='center'><img src='images/loading-small.gif' width='15' height='15' /></div>");
$.ajax({
url: 'actions/pause.php',
type: 'POST',
dataType: 'json',
success: function(response, textStatus, XMLHttpRequest) {
nearestTd.html("<span class='editSystemCountryLanguage'>ok</span>");
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
if (typeof console != 'undefined')
console.dir(XMLHttpRequest);
return false;
}
});
}
PHP代码,只是一个简单的暂停功能,所以我可以有一个AJX延迟&amp;测试这个错误:
<?php
sleep(1.5);
?>
页面上的代码&amp; jquery'听众':
$(".addSystemCountryLanguage").live('blur', action_addSystemCountryLanguageField);
$(".addSystemCountryLanguage").keypress(function(e) {
if(e.keyCode == 13) {
action_addSystemCountryLanguageField(e);
}
});
HTML:
<input class='addSystemCountryLanguage' style='width:80px; border: 0;' value='' />
答案 0 :(得分:6)
您无意中使用了全局变量。
function action_addSystemCountryLanguageField (event) {
var value = $(event.target).val();
var nearestTd = $(event.target).closest('td');
var loading=nearestTd.html("<div align='center'><img src='images/loading-small.gif' width='15' height='15' /></div>");
.
.
.
}
http://www.jslint.com/有时也会为你捕捉这样的问题。