jquery $(event.target).closest(' td')失败'同时多次调用同一个函数时

时间:2011-03-29 11:46:44

标签: php jquery ajax

我遇到以下代码的问题,我不确定原因。

情景摘要:
基本上我有一个包含几个输入字段的页面用于内联编辑,每当填充每个输入字段,模糊或按回车时,都会调用javascript函数执行以下操作:

  • 显示“loading”而不是输入字段
  • 对PHP文件执行AJAX请求
  • 完成后,将'loading'替换为用户的值

问题
如果用户一次编辑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='' />

1 个答案:

答案 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/有时也会为你捕捉这样的问题。