2

スクリプトの最初の関数としてjQuery Autocompleteを宣言すると、他の関数が実行されなくなることがわかりました。

以下の 2 番目と 3 番目の関数は機能しません。

<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()...)問題なく宣言された順序ですべてのハンドラーを実行する必要があります。あなたの呼び出しのように見えます とautocomplete犯人suggestです。

jQuery はイベント ハンドラーに対して非常に慎重です。クリック ハンドラーで上記のようなことをしようとすると、それらも (互いに上書きするのではなく) 順番に実行されることに気付くでしょう。それを試してみてください:

someElement が次のようにマークアップされているとします。

<span id="someElement" onclick="alert('Me First!');" />

...そして JavaScript

$("#someElement").click
(
  function()
  {
    alert("1");
  }
);

$("#someElement").click
(
  function()
  {
    alert("2");
  }
);

「Me First!」、「1」、「2」の順に 3 つの警告ボックスが表示されます。

jQuery は、イベントが発生したときにクリックする最初の関数として、マークアップされた onclick ハンドラーを保持するためにさらに努力します。これにより、このライブラリを ASP.NET などのサーバー側テクノロジで使用することが非常に安全になります。

jQuery によって割り当てられたすべてのクリック イベント ハンドラーを要素から削除するには、次の手順を実行します。

$("#someElement").unbind("click");

これは、別の方法で割り当てられたクリック ハンドラー (つまり、マークアップの onclick 属性) を削除しないことに注意してください。

于 2009-09-16T01:20:38.333 に答える