2011-12-13 112 views
2

我想點擊的事件處理程序添加到一堆使用jQuery使用代碼動態生成的div如下的浮動屬性打破:jQuery的單擊事件

for (var i = 0; i < 10; ++i) { 
    var testdiv = document.createElement('div'); 
    testdiv.innerHTML = 'test' + i; 
    testdiv.id = 'test' + i; 

    var nestingdiv = document.createElement('div'); 
    nestingdiv.classList.add('nestingdiv'); 
    nestingdiv.appendChild(testdiv); 

    setTestClickHandler(i); 
end 

function setTestClickHandler(i) { 
    $('#test' + i).click(function() { 
     alert(i); 
    }); 

這工作完全正常,但只要我一個浮動參數添加到.nestingdiv類是這樣的:

.nestingdiv { float:left; } 

單擊處理不再觸發(在Firefox和Chrome測試)。有沒有人有任何想法,爲什麼這可能是這種情況,或者我可以如何解決它?

+0

我將背景色屬性添加到您的div,如。 div {background-color:red; }並觀察頁面 - 您可能會發現您的div與您期望的地點/形狀不同! – NibblyPig

+0

嗯,我不確定當你沒有將這些元素連接到DOM樹時,它如何能夠正常工作。嘗試使用'document.body.appendChild(nestingdiv)'將'nestingdiv'添加到現有的和活的樹中。 – kubetz

回答

3

問題不在於你的JavaScript,而在於你的CSS。換句話說,「點擊」處理程序就好了。當唯一的嵌套元素是浮動的,父元素失去了它的「結構」(缺乏更好的單詞)並崩潰。它仍然存在,但現在高出1px。

解決方案: http://css-tricks.com/snippets/css/clear-fix/

替代解決方案: http://thinkvitamin.com/design/everything-you-know-about-clearfix-is-wrong/

+0

非常感謝 - 太棒了!我認爲我的css有點生疏,因爲我記得之前曾經在清理浮游物方面進行過爭鬥,但確定這是一個事件處理程序問題,因此忽略了這一點。 –