web-dev-qa-db-ja.com

jQueryのchange()メソッドで引数を取る関数を使用する方法は?

JQueryバージョン1.5を使用しています。私はjQueryの change() 関数、特にこのビットを見ています:

.change( [ eventData ], handler(eventObject) )
eventData: A map of data that will be passed to the event handler.
handler(eventObject): A function to execute each time the event is triggered.

JavaScriptの「データのマップ」とは正確には何ですか?次のテスト関数をイベントハンドラーとして使用するにはどうすればよいですか?

var myHandler = function(msg){alert(msg);};

私はこれを試しました:

$("select#test").change(["ok"], myHandler);

およびアラートレポート[オブジェクトオブジェクト]

40

_event.data_ を参照してください。データは引数としてハンドラーに渡されるのではなく、イベントオブジェクトのプロパティとして渡されます。

_$("select#test").change({msg: "ok"},  function(event) {
    alert(event.data.msg);
});
_

ハンドラーは常にeventオブジェクトである1つの引数のみを受け入れます。これが、アラートが_"[object Object]"_を表示する理由です。関数はイベントオブジェクトを出力しています。
カスタム引数付きの関数を使用する場合は、それらを別の関数にラップする必要があります。

_$("select#test").change({msg: "ok"},  function(event) {
    myHandler(event.data.msg);
});
_

あるいは単に

_$("select#test").change(function(event) {
    myHandler("ok");
});
_

ところでセレクターは$('#test')と書く方が適切です。 IDは一意です(一意である必要があります)。タグ名を追加する必要はありません。

60
Felix Kling

JavaScriptの「データのマップ」とは正確には何ですか?

基本的には単なるオブジェクト、例えば:

var data = {
    foo: "I'm foo",
    bar: "I'm bar"
};

JavaScriptオブジェクトはすべて本質的にマップです(別名「辞書」、別名「連想配列」)。

次のテスト関数をイベントハンドラーとして使用するにはどうすればよいですか?

別の関数でラップすることにより:

$("select#test").change(function() {
    myHandler($(this).val());
});

これは、選択ボックスの値が変更されるたびに、myHandlerを呼び出します。

eventData部分を使用する場合は、ハンドラーの前にオブジェクトを追加します。

$("select#test").change({
    foo: "I'm foo"
}, function(event) {
    myHandler(event.data.foo, $(this).val());
});

これは、最初の引数として「I'm foo」を使用してmyHandlerを呼び出し、その後、変更されるたびに選択ボックスの値を呼び出します。

13
T.J. Crowder