2

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

4

1 回答 1

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

于 2009-09-16T01:20:38.333 回答