2017-01-06 47 views
0

目前我有350+事件,如所有事件代表團到文檔

$(document).on('click','.removable-init',function(){});

林看到一個性能問題,一些點擊事件是由幾分之一秒的延遲。 但我的整個網站是動態生成的Ajax。

我想知道如何處理這些問題。

例如我的網站的流量讓我們看下面。

ONLOAD

<html> 
<head></head> 
<body> 
<div id="main"> 
    <button id="clickme"></button> 
    <button id="clickme2"></button> 
</div> 
</body> 
</html> 

點擊:#clickme

$('#main').append('<div id="anothermain"><button id="anotherclick"></button></div>'); 

點擊:#clickme2

$('#main').append('<div id="anothermain4"><button id="anotherclick4"></button></div>'); 

點擊:#anotherclick

$('#anothermain').append('<div id="anothermain2"><button id="anotherclick2"></button></div>'); 

點擊:#anotherclick2

$('#main').append('<div id="mainsibling"><button id="clicksibling"></button></div>'); 

點擊:#anotherclick4

$('#main').append('<div id="anothermain5"><button id="anotherclick2"></button></div>'); 

以上僅僅是一個例子,表明點擊EV ents是巨大的(350+),並且動態創建在網站的不同部分。

所以我想知道如何處理這些問題,而不使用委託文件。 ?

有時專注於文本框,下拉列表中單擊等時,有很多在屏幕上的元素

+0

一種方法是儘可能地接近對象:'$(「#main」)。on('click','button',function(){});' – mplungjan

+0

可以包含所有元素的最接近的東西是'#main',它是document/body的子元素,所以我不認爲它會影響很多 –

回答

0

一種解決方案可能是點擊綁定新的元素,你已經創建後的反應遲緩。

不是在頁面加載時附加所有事件處理程序,您可以在單擊現有元素時創建該元素,並處理點擊新單擊的元素本身。事情是這樣的:

<html> 
<head></head> 
<body> 
<div id="main"> 
    <button id="clickme"></button> 
</div> 
</body> 
</html> 

JS:

$(function() { 
    $("#clickme").on('click', function(e) { 
     var $anotherMain = $('<div id="anothermain"><button id="anotherclick"></button></div>'); 
     $('#main').append($anotherMain); 
     //handle click on anotherMain 
     $anotherMain.on('click', function(e) { 
      var $anotherMain2 = $('<div id="anothermain2"><button id="anotherclick2"></button></div>'); 
      $('#main').append($anotherMain2); 
      //handle click on anotherMain 
      $anotherMain2.on('click', function(e) { 
       // add anotherMain3 and so on. 
      }); 
     }) 
    }) 
}); 

創造新的元素和結合自己的點擊常用功能可以拔出並重新使用。

+0

如果有點擊事件的分支網絡會發生什麼。例如。可以說onclick'#clickme2' ** **'#clickme'的兄弟會附加'#anotherclick4',這會點擊附加'#anotherclick3'?如果'#anotherclick3'被點擊了,我怎麼知道? –

+0

我更新了我的問題 –

+0

從我所瞭解的問題是,您沒有頁面加載的元素,因此您需要使用委派。但是,您正在動態創建元素,並且此時您有對創建元素的引用,因此,您可以綁定點擊它。 –