2012-01-30 185 views
1

我正在學習jQuery/javascript,並且有一個相當基本的問題。爲什麼這不起作用?提前致謝。用jQuery選擇新元素

<script type="text/javascript"> 
      $(document).ready(function() { 
       $('<div/>', { 
        id: 'foo', 
        text: 'Does not work' 
       }).appendTo('body');  }); 
</script> 

<script type="text/javascript"> 
      $("#foo").click(function() { 
       alert('Success'); }); 
</script> 
+3

你的代碼,第二部分是不是在文件準備好功能? – benhowdle89 2012-01-30 00:11:14

回答

2

它不起作用,因爲第二個腳本部分將在$(document).ready被觸發前執行。因此,它會嘗試將onclick處理程序附加到尚不存在的元素。

你可以把它通過任何連接的click()事件的單元工作爲你添加:

$(document).ready(function() { 
    $('<div/>', { 
     id: 'foo', 
     text: 'Does not work' 
    }) 
    .appendTo('body') 
    .click(function() { 
     alert('Success'); 
    });  
}); 

或使用on()

$('document').on("click", "#foo", function() { 
    alert('Success'); 
}); 
+0

非常感謝您的幫助!對此,我真的非常感激。歡呼聲 – Mustang31 2012-01-30 00:29:51

+1

您應該注意,使用'$('#foo')。on('click',...)'與使用'click()'基本相同。它只會在文檔中的元素*已經存在時才起作用。 使用* delegation *通過傳遞一個選擇器到'on',所以你不必在每次創建元素時都附加它:'$(document).on('click','#foo',...) '。 [見參考資料](http://api.jquery.com/on/)。 – GeReV 2012-01-30 00:48:35

+0

@GeReV對不起,我仍然習慣於不使用'live()'。我會爲未來的讀者編輯我的答案。 – Jivings 2012-01-30 01:19:59

1

你總得把所有的在一個$(文件)。就緒()。

所以:

$(document).ready(function() { 
       $('<div/>', { 
        id: 'foo', 
        text: 'Does not work' 
       }).appendTo('body');  
       $("#foo").click(function() { 
       alert('Success'); }); 
});