8

パラメータを含むにイベントをバインドしようとしtextboxています。次のキープはそれを実行する必要があるように見えますが、ページが読み込まれるたびに実行されます。

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

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

4

5 に答える 5

12

bind()の2番目の引数としてイベントパラメータを渡すことができます。これは直接のコールバックパラメータではありませんが、使用したい場合があります。

jQueryドキュメントから: bind

function handler(event) {
    alert(event.data.foo);
}  
$("p").bind("click", {foo: "bar"}, handler)
于 2010-01-11T18:13:41.810 に答える
11

パラメーターを受け取る関数をバインドするには、無名関数を使用してパラメーターのクロージャーとして機能します。

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);
});
于 2009-11-17T19:00:50.307 に答える
4

bdukesは正確に正しいです。最近、jQueryのbind / unbind関数と匿名関数(イベントの名前空間)に関係する興味深いことがわかったので、応答を追加します。前に上に示したbindイベントは次のように呼び出されます。

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

これをアンバインドするには、ユーザーでさえも呼び出す必要があります... jQuery('#textbox').unbind('click');

実際には、すべてのonClickイベントを削除します。

現在、jQueryの名前空間で提供されています。クリックイベントにアタッチし、後でバインドを解除する匿名関数がある場合は、次のように実行します。

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

次に、バインドを解除するには、次のようにunbind関数を呼び出します。

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

残りのonClickイベントは残ります。

于 2010-01-11T18:03:39.600 に答える
1

その理由は、EventWithParamがバインディング内の関数として呼び出されているためです。別の言い方をすれば、クリックイベントを呼び出した結果EventWithParam('param')にバインドしているということです。これは機能するはずです:

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

これで、イベントが発生したときに呼び出す関数に偶数をバインドしましたEventWithParam('param')

于 2009-11-17T19:01:05.813 に答える
0
jQuery(function() {
    jQuery('#textbox').click(function() {
        EventWithParam(param1,param2,...,paramN);
    });
});

function EventWithParam(param1,param2,...,paramN) {
    doSomething...;
    ...;
}
于 2009-11-17T19:03:11.663 に答える