2011-02-04 5 views
36

私はjQueryのバージョン1.5を使用しています。 私はjQueryのchange()機能 で、具体的に、このビットで探しています:どのようにjQueryの変化()メソッドに引数を取る関数を使用するには?

.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); 

と警告レポート[オブジェクトのオブジェクト]正確にJavaScriptで "データのマップ" は何

答えて

56

event.dataを参照してください。データは、ハンドラに引数として渡されていませんが、イベントオブジェクトのプロパティとして:

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

ハンドラは常にだけevent対象である一つの引数を受け入れます。これはあなたのアラートは、あなたの関数はイベントオブジェクトを印刷している、"[object Object]"を示した理由です。
カスタム引数を持つ関数を使用する場合は、別の関数にそれらをラップする必要があります。

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

か、単に

ところで
$("select#test").change(function(event) { 
    myHandler("ok"); 
}); 

。セレクタは、より良い$('#test')として書かれています。 IDは一意である必要があります。タグ名を前に付ける必要はありません。

+0

これは、myHandlerが受け取る$(this)がこのように呼び出されたときに異なる点です。元の$(this)が必要な場合は、 "ok"の後にパラメータとして渡すことができます。 –

13

?基本的にはちょうどオブジェクト、例えば:

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

すべてのJavaScriptオブジェクト、本質的に(別名 "辞書" 別名 "連想配列を")にマッピングされています。

どのように私は、イベントハンドラとして、次のテスト機能を使用することができますか?

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

それが変更されるたびに、選択ボックスの値とmyHandlerを呼び出す:別の関数でラップすることにより

。その後、最初の引数、選択の値として、「私がfooだ」とmyHandlerを呼び出す

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

あなたがeventData一部を使用する場合は、前のハンドラにオブジェクトを追加それが変わるたびに。