2012-01-30 100 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'); }); 
});