多个jQuery函数&自动完成

时间:2009-09-16 01:18:14

标签: jquery autocomplete web2py freebase

我发现使用声明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的任何类似问题?

1 个答案:

答案 0 :(得分:3)

jQuery应按照声明的顺序执行所有$(function()...)处理程序而不会出现问题。看来您拨打autocompletesuggest是罪魁祸首。

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属性)。