複数のjQuery関数&オートコンプリート
-
07-07-2019 - |
質問
宣言する 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オートコンプリートで同様の問題に遭遇しましたか?
解決
jQueryはすべての $(function()...)
ハンドラーを問題なく宣言された順序で実行する必要があります。 autocomplete
と suggest
の呼び出しが原因であるようです。
jQueryはイベントハンドラーに対して非常に慎重であり、クリックハンドラーで上記と同様のことを行おうとすると、それらが(互いに上書きするのではなく)順番に実行されることに気付くでしょう。試してみてください:
次のようにsomeElementがマークアップされていると仮定します:
<span id="someElement" onclick="alert('Me First!');" />
...およびJavaScript
$("#someElement").click
(
function()
{
alert("1");
}
);
$("#someElement").click
(
function()
{
alert("2");
}
);
次の順序で3つのアラートボックスが表示されます:&quot; Me First!、&quot; &quot; 1、&quot;および&quot; 2.&quot;
jQueryは、イベントが発生したときにクリックする最初の関数として、マークアップされたonclickハンドラーを保持するためにさらに努力します。これにより、ASP.NETのようなサーバーサイドテクノロジーでこのライブラリを使用することが非常に安全になります。
jQueryによって割り当てられたすべてのクリックイベントハンドラーを要素から削除するには、次の手順を実行します。
$("#someElement").unbind("click");
他の方法(つまり、マークアップのonclick属性)が割り当てられたクリックハンドラーは削除されないことに注意してください。