2014-03-24 56 views
0

我想在我的容器中動態創建一些div元素。我用簡單的功能做到這一點:jQuery .hide()不能在動態創建的元素上運行

function myFunction(volume){ 
for(var i = 1; i<= volume; i++){ 
$('.container').append("<div></div>"); 
} 

的問題是,產生的div元素沒有反應到我的jQuery .hide()函數。有誰知道它爲什麼不起作用?對於手動和動態創建的元素,HTML看起來都很好。

我做的jsfiddle,但它有點太碎: http://jsfiddle.net/gQBen/

我.hide的()函數調用

$('div').mouseenter(function() { 
if (run){ 
$(this).hide(3000, function() { 
result++; 
run = false; 
rewrite(); 
}); 
} 
}); 

阿隆解決它的評論:http://jsfiddle.net/arunpjohny/SM38C/1/感謝!

+0

你怎麼罵的隱藏功能? – Merlin

+0

將mouseenter委託給容器 – Huangism

+0

參見http://jsfiddle.net/arunpjohny/SM38C/1/ –

回答

3

你應該使用event delegation

$(".container").on("mouseenter","div",function(e){ 

}); 

事件委派,您可以附加一個事件偵聽器,以父元素,這將觸發對所有選擇匹配的孩子,無論是現在存在,或者是那些孩子們未來增加。

+1

在這個特殊情況下,可以附加事件到.container div而不是 – Huangism

+0

@Huangism我編輯了答案..謝謝你的消化 –

0

使用的選項.onchange()代替的onclick

$('select').on('change',function(){ 
myFunction(this.value); 
}); 

也增加價值的選項

<option value="4" >4</option> 

您還需要使用事件代表團動態添加元素

$(document).on('mouseenter','div',function() { 

DEMO

+0

適用於jsfiddle(顯然你在你的演示中),但不能用於調用.hide函數(在你的演示中) –

-1

UPDATE

此問題已更新,以便

$(".container").on("mouseenter","div",function(e){ 
    if (run){ 
     $(this).hide(3000, function() { 
      result++; 
      run = false; 
      rewrite(); 
     }); 
    } 
});