2011-07-13 74 views
0

我遇到DOM元素問題,需要添加2000個塊。我嘗試通過setTimeout來做到這一點,但事件不適用於這些元素。任何人我犯了什麼錯誤?大量dom元素的問題

function init(){ 
    $('#regions').prepend("<ul></ul>"); 
    setTimeout(function(){ 
     var opt=$('#regions ul'); 
     for(var i=0; i<50; ++i){ 
      for(var j=0; j<50; ++j) 
       opt.append('<li class=\"field\"></li>'); 
     } 
    }, 0); 
} 
+4

你能發表一些代碼嗎?這通常是一個很好的開始... – BenM

回答

0

,因爲你是在頁面加載後使用jQuery,通過加載元素,你需要將事件"live"的元素。

編輯://我說的綁定,但活思想,

可以說,所有的元素有一個名爲「添加」類,只是爲了讓事情變得更簡單。

,那麼你會做懸停事件綁定:

$(".added").live("mouseover",function(){ 
//do stuff 
}); 
+0

但如何添加懸停事件與綁定? – Paul

3

先建,你要插入,然後做一個單一操作的完整HTML。

function init(){ 
    var html =[]; 
    for(var i=0; i<50; ++i){ 
     for(var j=0; j<50; ++j) 
      html.push('<li class=\"field\"></li>'); 
    } 

    $('#regions').prepend("<ul>" + html.join('') + "</ul>"); 
} 
+0

+1,用於首先構建整個HTML。 –

0

您可以使用jQuery的活法。在它的幫助下,您可以將事件綁定到一組元素,即使它們可能稍後添加。

例如:

$('#regions ul li').live('mouseover', function() { 
    // Live handler called. 
}); 

在這裏看到更多的信息:http://api.jquery.com/live/

0

一些快速的東西:

  1. 爲什麼你有雙for循環,而不是隻有1?
  2. 你應該看看AlfonsoML建議先建立整個HTML字符串,然後將其插入到DOM中。
  3. 就像live真的很方便,我最經常建議用delegate來代替。類似$('#regions').delegate('li','click', function (e) { ... })live的功能相同,並且在DOM上更清晰。