0

myFuncdiv1またはdiv2をクリックするという2つの異なる方法でトリガーできる関数があります。

  • クリックがdiv2から来た場合は、呼び出し時にいくつかのパラメーターを関数に渡したいと思います。
  • また、どちらの場合も、クリックされたアイテムへの参照が必要です$(this)

このコードを試しましたが、2番目のバージョン(パラメーターを渡す)は、何もクリックしなくても自動的にトリガーされます。何が間違っているthisのでしょうか。どちらの場合も、パラメーターとして渡す必要がありますか?

$('#div1').live('click', myFunc);
$('#div2').live('click', myFunc('param1 value', 'param2 value'));

function myFunc(param1, param2){
  console.log('inside myFunc');
}
4

5 に答える 5

4

live2 番目の呼び出しを次のように置き換えます。

$('#div2').live('click', function() {
    myFunc.call(this, 'param1 value', 'param2 value');
});

またはon、バインディング ハンドラーの新しい標準として提案されている jQuery 1.7+ の新しいメソッドを使用します。

$(document).on('click', '#div2', function() {
    myFunc.call(this, 'param1 value', 'param2 value');
});
于 2012-05-31T19:53:13.413 に答える
1

liveは使用しないでください。現在は非推奨です。代わりにonを使用してください。

datajQuery は、イベントが発生したときに渡す簡単な方法を提供します。これは標準的な方法である必要があります。

$(document).ready(function() {  
    $("body").on("click","#div1", {param1: "param1",param2: "param2"},myFunc);
    $("body").on("click","#div2",myFunc);
    function myFunc(event){
        console.log(this.id);
        if(this.id == 'div1'){
            console.log(event.data.param1);
            console.log(event.data.param2);
        }
    }

});

編集:

あなたのコンテキストや要件が何であるかはわかりませんが、次のようにコーディングしたでしょう。

$("body").on("click","#div1,#div2",function(){
    if(this.id == 'div1'){
         // the code for div1, use your params here.   
    }
    else{
        // the code for div2
    }
});
于 2012-05-31T20:02:59.193 に答える
1

2 行目はすぐに実行されmyFuncます。代わりに、無名関数でラップします。

$('#div2').live('click', function() {
    myFunc.apply(this, ['param1 value', 'param2 value']);
});

元のコンテキストを使用するapplycall、保存する必要があります (そうthisしないmyFuncと、クリックされた要素ではなく、グローバル ウィンドウ オブジェクトになります)。

于 2012-05-31T19:53:34.683 に答える
1

匿名関数を 2 番目のハンドラとして渡し、その中で必要に応じて "myFunc" を呼び出す方がよいと思います。

例:

$('#div1').live('click', myFunc);
$('#div2').live('click', function() {
  myFunc.call(this, 'param1 value', 'param2 value');
});
于 2012-05-31T19:54:22.680 に答える
0

この方法ではこれを行うことはできません。関数をインラインで定義し、そこから myFunc を呼び出す必要があります。

$('#div1').live('click', myFunc);
$('#div2').live('click', function(){ return myFunc('param1 value', 'param2 value'); } );
于 2012-05-31T19:54:02.787 に答える