2013-02-24 51 views
0

由於某種原因,當我單擊它們時,儘管編寫了一個選擇所有div的函數,但我的「megaPixel」動態生成的div沒有響應。所有其他divs點擊響應。

function init($input){ 
    for (i=1; i <= 20; i++){ 
    $('body').append('<div class="megaPixel" id="megaPixel_' + $input + '"></div>'); 
    $input = $input + 1; 
    } 
}; 

$('div').click(function(){ 
    $('.megaPixel').css('background-color', 'red'); 
}); 

init(1); 
+2

的jQuery的相關問題,一半屬於事件代表團。 – undefined 2013-02-24 00:30:14

+0

投票結束爲_too localized_; OP可以通過在綁定之前調用'init()來解決這個問題。 – Mathletics 2013-02-24 00:31:24

回答

1

這是因爲您在生成div之前分配了點擊偵聽器。

function init($input){ 
    for (i=1; i <= 20; i++){ 
    $('body').append('<div class="megaPixel" id="megaPixel_' + $input + '"></div>'); 
    $input = $input + 1; 
} 
$('div').click(function(){ 
    $('.megaPixel').css('background-color', 'red'); 
}); 
}; 

init(1); 

試試看吧。

+0

我從昨天開始就一直在掙扎,在幾分鐘內我得到了4個回覆。免費。驚人。 – 2013-02-24 00:46:13

0

我認爲你正在尋找這樣的東西。

$('div.megaPixel').on('click', function(){ 
    $(this).css('background-color', 'red'); 
}); 
+0

這將查找div的'megaPixel' _inside_元素。 – Mathletics 2013-02-24 00:27:07

+0

感謝您的支持。固定。 – 2013-02-24 00:28:08

0

您是否試過使用$(document).on("click", "div.megaPixel", function() {});來代替動態添加的元素?

1

你可以使用這個太:

$("body").on("click", "div.megaPixel", function(){ 
    $(this).css('background-color', 'red'); 
}); 
+0

我認爲這可能是迄今爲止最好的建議。 init執行時並不重要。你將你的點擊處理程序綁定到body,所以他們住在那裏。只要你點擊該頁面,它就會知道它是否適用於單擊時可用的元素。工作很好。 – 2013-02-24 00:41:05

+0

@WillKlein - 哈哈,這個確切問題的變化每天都會被問到很多次,所以這是一個簡單的建議:) – david 2013-02-24 00:45:56