47

動作しない次のスクリプトがあります

<script type="text/javascript" >

   function ADS(e){ alert(e); }

   $(document).ready(function(){
          $(document).on("dblclick","#an_tnam tr", ADS('hello'));
          $(document).on("dblclick","#kv_tnam tr", ADS('world'));
          // ....  
 });

</script>

イベントハンドラ関数 ADS に引数を渡すにはどうすればよいですか?

4

6 に答える 6

54

関数は、関数参照が渡されることを.on()期待しています。あなたがしているのは、関数を呼び出してその戻り値を渡すことです。パラメータを渡す必要がある場合は、呼び出しを無名関数でラップする必要があります。

$(document).on('dblclick', '#an_tnam tr', function(event) {
    ADS('hello');
});

jQuery は常に、正規化されたイベント オブジェクトを最初の引数として実行する関数に渡します。

于 2013-04-09T14:12:19.377 に答える
6

実際には、JS bind() を使用して、余分な混乱や匿名関数を使用せずに、これを実現するための非常にすっきりとした簡単な方法があります。

$(document).on('dblclick', ADS.bind(null, 'hello'));

最初のパラメータは、「this」がコールバック関数内に持つ値です。

Mozilla Developer Network の詳細情報: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_objects/Function/bind

于 2016-02-19T16:30:02.277 に答える
6

Anthony Gristが指摘したように、メソッド.on()はその部分で関数参照を期待しています。何も返さない関数を評価しています ( null)。

ただし、JavaScript の楽しい機能の 1 つは、関数を含めてすべてがオブジェクトであることです。少し変更すると、ADS()代わりに無名関数オブジェクトを返すように変更できます。

function ADS(e){ 
    return function(){ alert(e); };
}

http://jsfiddle.net/cSbWb/

于 2013-04-09T14:15:01.187 に答える
4
function ADS(e){ alert(e); }

$(document).ready(function(){
          $(document).on("dblclick","#an_tnam tr", function (e) { ADS('hello') });

 });

トリックを行います。

于 2013-04-09T14:11:51.343 に答える
3
function ADS(e) {
    return function() {
        alert(e);
    };
}

やってる時はそんな風に

$(document).on("dblclick","#an_tnam tr", ADS('hello'));

、イベント ハンドラーとして割り当てられるのは返された関数です (そして、文字列引数は、呼び出されたときではなく、ハンドラーを割り当てるときに渡されます)。

于 2013-04-09T14:14:55.810 に答える