2015-02-23 69 views
0

我在頁面中有大量的按鈕,我想爲每個按鈕添加一個點擊事件,也就是當用戶單擊它顯示的按鈕時相應的按鈕值。用Jquery處理大量點擊事件的更好的解決方案

我已經在匿名函數的幫助下實現了一個方法。我已經包括了我的代碼如下

HTML

<div id="div1"/> 

的Javascript

$(document).ready(function(){ 
    for(var i =0;i<100;i++) 
    { 
     $("#div1").append("<input type='button' class='myclass' id='mybutton" + i + "' value='mybutton" + i + "'> "); 
    }; 

    $(".myclass").click(function(e){ 
     alert(e.target.id); 
    }); 
}); 

它可以正常使用,這個問題是一個匿名函數爲每個按鈕創建此表上,也就是說,如果我的頁面中有10k個元素,則匿名函數將創建10k次,即i think i causes big memory wastage有沒有更好的方法來實現這個?請幫我解決這個問題,任何幫助將不勝感激。謝謝

+0

退房jQuery.on()... – jahroy 2015-02-23 06:28:42

+0

@jahroy當然,我會看看 – 2015-02-23 06:32:43

+0

你很擔心(很大程度上)不必要的。您的代碼創建**一個**匿名函數,並將其作爲點擊處理程序多次附加。 – 2015-02-23 06:33:11

回答

0

我認爲你可以使用使用事件代表團來解決這個問題。

事件代表是一種通過一個共同的父母而不是每個孩子迴應ui事件的機制。

更多有關事件代表團可以參考this堆棧溢出問題

在你情況下,最好用事件委派

您可以使用下面的代碼

$(document).ready(function(){ 
    for(var i =0;i<100;i++) 
    { 
     $("#div1").append("<input type='button' class='myclass' id='mybutton" + i + "' value='mybutton" + i + "'> "); 
    } 
    $("#div1").click(function(e){ 
     if($(e.target).hasClass("myclass")) 
      alert(e.target.id); 
    });  
}); 

你可以檢查這我已經包括一個這樣的例子DEMO

或者你可以通過克里斯的解決方案,它也將正常工作

+0

我會看看這謝謝重播 – 2015-02-23 06:31:05

+0

它工作感謝幫助我 – 2015-02-23 06:36:11

+0

如果效率是問題,那麼就像** [這](http:// jsfiddle。淨/ ut766vda/1 /)** – 2015-02-23 07:00:08

0

你想jQuery的on功能,沿着這些線路...

$("#containerdiv").on('click', '.myclass', function() { 
    alert($(this).id); 
}); 
+0

我會看看此感謝重播 – 2015-02-23 06:31:46

+0

它表明undifined – 2015-02-23 06:35:54

+0

能你幫我請你的代碼顯示undefined – 2015-02-23 06:37:08

0
$(document).ready(function(){ 
var callback=function(){ 
      console.log(this.id); 
    } ; 
$('#div1').on('click','button.myclass',callback); 
    for(var i =0;i<100;i++) 
    { 
     $("#div1").append("<input type='button' class='myclass' id='mybutton" + i + "' value='mybutton" + i + "'> "); 
    }; 


});  






this is called event delegation. 
+0

我在哪裏把你的代碼放在我的問題?請你舉個例子 – 2015-02-23 06:39:33

+0

@nikeshgupta更新了答案。 – 2015-02-23 07:24:46

相關問題