0

jQueryを使用して動的選択リストを作成しています。それらが変更されたときに、イベントが関数をトリガーしてデータを更新するようにします。

var selector    =   $('<select id="myid" />');
selector.append($('<option value>Option Placeholder</value>'));
// attach onChange event to select list 
selector.bind('change', doUpdate(this));

私の問題はchange、選択リストが作成されるたびにイベントが発生することです。トリガーがどのように発生しているのかはわかりません。changeイベントが変更されたときにのみイベントがトリガーされると思います。

http://jsfiddle.net/TPuwc/

4

3 に答える 3

3

これを行うとき:

selector.bind('change', doUpdate(this));

発生することを期待しているのは、イベントハンドラーをバインドして関数を実行し、引数としてdoUpdate渡すことです。this

それは起こっていることではありません。代わりに、doUpdate(this)すぐに呼び出して、その関数呼び出しによって返された値をイベントのイベントハンドラーとして設定しようとしますchange

あなたは簡単に行うことができます:

selector.bind('change', doUpdate);

jQueryはの値を処理するthisため(イベントをトリガーする要素になります)、引数として関数に渡す必要はありません。

于 2013-01-24T16:38:37.137 に答える
1

関数呼び出しと関数参照の違いを理解する必要があります。すべてのコールバックは、関数呼び出しではなく、関数参照(または無名関数)として提供する必要があります。

()違いは、関数名の後の括弧です。

selector.bind('change', doUpdate);

編集:必ず機能を更新してくださいdoUpdate。キーワードを使用して変更をトリガーした要素に自動的にアクセスできるためthis、パラメーターとして渡す必要はありません。

于 2013-01-24T16:38:47.637 に答える
1

イベントの配置方法が間違っています。イベント添付の場合、関数を渡す必要があります。ここでは、関数を実行して戻り値を渡しています。

var selector    =   $('<select id="myid" />');
selector.append($('<option value>Option Placeholder</value>'));
// attach onChange event to select list 
selector.bind('change', function(){ doUpdate(this) });
于 2013-01-24T16:39:16.557 に答える