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);
およびアラートレポート[オブジェクトオブジェクト]
_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は一意です(一意である必要があります)。タグ名を追加する必要はありません。
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
を呼び出し、その後、変更されるたびに選択ボックスの値を呼び出します。