如果删除第一行(alert()),以下代码将无效,而且显然我不需要它。我绑定事件的表单是使用jquery动态生成的。请问可能是什么问题?感谢。
alert("");
$("#search").autocomplete('func.php');
$("#c_name").autocomplete('func.php');
$("#search").keypress(function(event) {
if (event.which === 13) {
findItem('search');
return false;
}
});
答案 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;
}
});
});