1

http://api.jqueryui.com/autocomplete/などのjQueryUIプラグインのイベントをよりよく理解しようとしています。

たとえば、select(event、ui)イベントがあります。ドキュメントによると、2ビットのコードは同一であるように見えます。正しい?

$( ".selector" ).autocomplete({
  select: function( event, ui ) {}
});

( ".selector" ).on( "autocompleteselect", function( event, ui ) {} );

さて、私は両方とも「autocompleteselect」イベントのイベントハンドラー関数を選択された要素にアタッチしていると思います。ドキュメントには、「select」イベントの「type」が「autocompleteselect」として示されています。でも、イベント名は「select」だと思いました。「select」または「autocompleteselect」ですか?最初にjQueryUIソースコードを調べようとしましたが、文字列「autocompleteselect」は使用されていないことに注意してください。「autocompleteselect」はどこで定義されていますか?

次の混乱の原因は、イベントに関連付けられた無名関数内にコードを配置したときです。このコードは常に最初に実行され、次に偶数に関連付けられた追加のデフォルトプラグインコードが実行されますか?event.preventDefault();また、デフォルトの動作を防ぎますか?

4

2 に答える 2

3

これは、ウィジェットファクトリによって追加された機能です。_triggerを使用してイベントが発生すると、実際にはタイプが。のイベントが発生しwidget name + typeます。

例:名前を使用してウィジェットを作成し、実際mywidgetに発生するイベントのようにウィジェット内でイベントを発生させる場合は、になります。this._trigger('select')mywidgetselect

したがって、autocompleteソースコードを見ると、そこで使用されていることがわかりますthis._trigger( "select", ...)

詳細については、このブログを参照することもできます

于 2013-03-27T13:50:06.703 に答える
-2

これら2つのことは実際には同じではありません。彼らは同じことをします;-)まあ、ほとんど。

まず、少し理論を説明する必要があります。一般に、「非同期」コードを処理する場合、コールバックとイベントリスナーの2つのオプションがあります。コールバックは、他のアクションが終了した後にシステムによって呼び出される関数です。通常、オブジェクトを構成するか、関数を実行し、コールバックを「プライミング」して、何かが起こったときに開始します。イベントリスナーは、イベントが発生したときにシステムによって呼び出されます。通常、一連のイベントリスナーをイベントにバインドすると、コードの他の部分がイベントをトリガーして、すべてのリスナー関数をトリガーする場合があります。

イベントとコールバックの両方に慣れていない場合、違いがわからない場合があります。コールバックを使用するとコードのようなコンパクトな「スパゲッティ」になりますが、リスナーを使用すると柔軟ですが読みにくいコードになります。最善のアプローチは、両方を組み合わせて、可能な限り最も読みやすいコードを取得することだと思います。

特定のケースでは、「select」は構成オブジェクトのプロパティであり、コールバック関数を指定します。

「autocompleteselect」はイベントの名前です-そのイベントにリスナーを追加できます

$('.selector').on('autocompleteselect', doSomething);

または自分でイベントをトリガーします

$('.selector').trigger('autocompleteselect');
于 2013-03-27T14:07:40.270 に答える