我不明白这个javascript / jquery代码是如何执行的

时间:2011-06-23 11:12:41

标签: javascript jquery jquery-autocomplete

如果删除第一行(alert()),以下代码将无效,而且显然我不需要它。我绑定事件的表单是使用jquery动态生成的。请问可能是什么问题?感谢。

alert("");
$("#search").autocomplete('func.php');
$("#c_name").autocomplete('func.php');

$("#search").keypress(function(event) {
    if (event.which === 13) {
        findItem('search');
        return false;
    }
});

4 个答案:

答案 0 :(得分:5)

可能是警报提供了jQuery识别所需元素所需的延迟。

删除alert()并在代码周围添加以下内容:

$(document).ready(function(){ ... your code here ... })

答案 1 :(得分:2)

警报为表单加载提供了必要的延迟,之后将事件绑定到元素是有意义的。如果没有alert语句,代码将在表单元素实际加载之前执行。尝试使用jquery的live()函数将事件绑定到动态加载的元素。以下是如何使用它:http://api.jquery.com/live/

答案 2 :(得分:1)

如果在动态创建搜索表单之前调用$("#search"),则jQuery查询将返回0个对象,并且无法将事件绑定到任何对象。

alert()的调用会创建一个暂停,允许在$("#search")查询之前创建表单。您可以alert $("#search")使用和不使用第一个alert()的结果来确认这一点。

在尝试将任何事件绑定到搜索表单之前,您必须确保已创建搜索表单。如果这不是一件容易的事,你可以考虑使用jQuery 1.5+ deferred objects。延迟对象可用于确保在将事件绑定到它之前创建搜索表单。

答案 3 :(得分:0)

你需要将它包装在$(document).ready a la:

$(document).ready(function(){
  $("#search").autocomplete('func.php');
  $("#c_name").autocomplete('func.php');

  $("#search").keypress(function(event) {
      if (event.which === 13) {
          findItem('search');
          return false;
      }
  });
});