1

私の機能の何が問題になっていますか? 1回ではなく何度も印刷されるのはなぜですか?

$('document').ready(function(){

    //click a button dozen times it invokes submit and write message in console.log
    $('button').live('click', function(){ 
       $this = $(this);
       submit($this); //this function maybe push in stack a lot of times 
   });

});

function submit($this){
   img = $this.nextAll(".submit");

   // and when I click on image it must write one time but it writes a lot of times                                   
   img.on('click', function(){                      
      console.log($this.text() + " ----> click"); // 
   });
}
4

2 に答える 2

3

問題は、関数が呼び出されるたびにクリックイベントをimgにバインドすることにあるようですが、削除することはありません。

  // and when I click on image it must write one time but it writes a lot of times                                   
  img.on('click', function(){                      
     console.log($this.text() + " ----> click"); // 
  });

関数の外にクリックイベントを追加します。

于 2012-10-22T22:19:11.423 に答える
0

は使用liveしないでください。非推奨です。この方法で記述できます

$(document).ready(function(){
    $(document).on('click', 'button', function(){ 
       img = $(this).nextAll(".submit");
       img.off('click').on('click', function(){                      
           console.log($(this).text() + " ----> click"); // 
       });
    });
});

span を使用した例

off以前に追加したイベントを登録解除して、一click度だけ起動するようにします。

アップデート:

以下は を置き換えることができliveます。documentの代わりに親ラッパーを使用できます

$(document).on('click', 'button', function(){ ... });
于 2012-10-22T22:32:33.140 に答える