我发现使用声明jQuery Autocomplete作为脚本中的第一个函数可以防止执行其他函数。
以下第二和第三项功能不起作用:
<script>
$(function() {
$("#ent_input").autocomplete('get_suggestions',
{autoFill: true, scroll: false});
});
// Freebase Suggest
$(function() {
$("#ent_input_fb").suggest({type:'/film/director'});
});
$(function() {
$("#ent_input_fb2").suggest({type:'/film/actor'});
});
</script>
但是,如果我将自动填充功能移到底部,则另一个脚本可以正常工作,但自动填充功能不起作用。
<script>
// Freebase Suggest
$(function() {
$("#ent_input_fb").suggest({type:'/film/director'});
});
$(function() {
$("#ent_input_fb2").suggest({type:'/film/actor'});
});
$(function() {
$("#ent_input").autocomplete('get_suggestions',
{autoFill: true, scroll: false});
});
</script>
是否有人遇到jQuery Autocomplete的任何类似问题?
答案 0 :(得分:3)
jQuery应按照声明的顺序执行所有$(function()...)
处理程序而不会出现问题。看来您拨打autocomplete
和suggest
是罪魁祸首。
jQuery对事件处理程序非常谨慎,如果你尝试使用单击处理程序执行与上面类似的操作,你会注意到它们也按顺序执行(而不是相互覆盖)。试试吧:
假设someElement标记如下:
<span id="someElement" onclick="alert('Me First!');" />
...和JavaScript
$("#someElement").click
(
function()
{
alert("1");
}
);
$("#someElement").click
(
function()
{
alert("2");
}
);
您将看到以下顺序显示的三个警告框:“我先!”,“1”和“2”。
jQuery在保留您标记的onclick处理程序方面更加努力,作为事件发生时第一个单击的功能。这使得使用像ASP.NET这样的服务器端技术的库非常安全,它可以在整个地方使用onclick处理程序。
要从元素中删除所有jQuery分配的单击事件处理程序,请执行以下操作:
$("#someElement").unbind("click");
请记住,这不会删除以其他方式指定的点击处理程序(即标记中的onclick属性)。