2009-11-17 9 views
8

パラメータを含むtextboxにイベントをバインドしようとしています。次のKeepはそれを行うべきかのように見えますが、ページが読み込まれるたびに実行されます。jQueryパラメータを使用したイベントのバインドとアンバインド

jQuery(function(){ 
    jQuery('#textbox').bind('click', EventWithParam('param')); 
}); 

このイベントは、ページが読み込まれるたびに呼び出されます。パラメータ付きのイベントはサポートされていないため、これは機能しない可能性があります。もしそうなら、別のルートがありますか?

答えて

10

パラメータを使用する関数をバインドするには、無名関数を使用してパラメータに対してクロージャとして動作させます。

jQuery(function($) { 
    var param = 'text'; 
    $('#textbox').click(function() { 
     EventWithParam(param); 
     // or just use it without calling out to another function 
     $(this).text(param); 
    }); 
}); 

あなたの例では、EventWithParam関数を実行し、その関数呼び出しの結果にバインドしようとしています。

関数を指定しないでunbindを呼び出すと、指定されたタイプのイベント(匿名関数を含む)のすべてのハンドラーがアンバインドされます。あなたは、特にその機能をアンバインドしたい場合は、このように、名前とそれを提供する必要があります:

jQuery(function($) { 
    var param = 'text', 
     clickCallback = function() { 
      EventWithParam(param); 
      // or just use it without calling out to another function 
      $(this).text(param); 
     }; 
    $('#textbox').click(clickCallback); 
}); 
1

理由はEventWithParamが右そこにあなたの結合の関数として呼び出されていることです。別の言い方をすると、クリックイベントをののEventWithParam('param')という結果にバインドしています。これは動作するはず:

jQuery('#textbox').bind('click',function(){EventWithParam('param')}); 

今すぐあなたもイベントの火災は、EventWithParam('param')

+0

私は、バインド解除をすれば、それは無名関数をアンバインドしますか?jQuery( '#textbox')。unbind( 'クリック'); –

+0

はい。 [http://docs.jquery.com/Events/unbind#typefn] – Dan

+0

を参照してください。これは私のためには機能しませんか? –

0
jQuery(function() { 
    jQuery('#textbox').click(function() { 
     EventWithParam(param1,param2,...,paramN); 
    }); 
}); 

function EventWithParam(param1,param2,...,paramN) { 
    doSomething...; 
    ...; 
} 
4

bdukesを呼び出しますが、正確に右である、関数にバインドされてきました。私は最近、jQueryのバインド/バインド解除関数と匿名関数、つまりイベント名空間について興味深いものを見つけたので、私の回答を追加しています。前述のバインドイベントは、以下のように呼び出されます。

jQuery('#textbox').bind('click',function(){EventWithParam('param')});

も、ユーザーがすべてのonClickイベントを削除し、...実際に jQuery('#textbox').unbind('click');

を呼び出す必要があり、これをアンバインドするには。

jQueryネームスペースが追加されました。無名関数を持っている場合は、クリックイベントにアタッチし、後でアンバインドするには次のようにします。

jQuery('#textbox').bind('click.yourNameSpace',function(){EventWithParam('param')});

次のように単純なコールにバインド解除機能をアンバインドします。

jQuery('#textbox').unbind('click.yourNameSpace');

あなたのonClickイベントの残りの部分が残ります。

11

イベントパラメータをbind()の第2引数として渡すことができます。これは、直接コールバックparametesはありませんが、多分あなたはそれを使用したいと思います:

jQueryのドキュメントから: bind

function handler(event) { 
    alert(event.data.foo); 
} 
$("p").bind("click", {foo: "bar"}, handler) 
+0

definatly私が使用するもの –

+0

handler()関数では、オブジェクトはイベント "data"フィールドからアクセスできます。関数ハンドラ(evt){var fooValue = evt.data.foo; } – SCO

関連する問題