2011-12-13 113 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有点生疏,因为我记得之前曾经在清理浮游物方面进行过争斗,但确定这是一个事件处理程序问题,因此忽略了这一点。 –