2013-05-01 42 views
1

我有这个页面:jQuery的追加和方法

<html> 
<head></head> 
<body> 

<div id="elem"></div> 
<button id="addElem">Add Element</button> 

<script src="jquery-1.9.1.js" type="text/javascript"></script> 

<script type="text/javascript"> 
    $(function() { 

     //add element to elem div 
     $("#addElem").click(function() { 
      $("#elem").append('<a id="test" href="#">this is a test</a><br />'); 
     }); 

     //remove added elements on click event 
     $("#test").on("click", function(){ 
      alert(12); 
     }); 

    }); 
</script> 

</body> 
</html> 

它在做什么,是添加一个链接,我希望能够点击添加的链接,并显示一条警告消息,但警报不管用。我错过了什么?

+0

可能重复[.delegate()VS。对()] (http://stackoverflow.com/questions/8359085/delegate-vs-on)您没有使用.on的委托事件的正确语法。你现在的用法和使用'.click(function(){...' – 2013-05-01 20:56:57

+0

)是一样的吗?jquery运行前的问题* * #test元素是否可用? – keithwyland 2013-05-01 20:58:58

回答

5

将其更改为...

$("#elem").on("click", "#test", function(){ 
     alert(12); 
}); 

jQuery的blog有一个很好的解释。

$(elements).on(events [, selector] [, data] , handler);

当提供一个选择器,。对()类似于.delegate(),它附加一个>委托的事件处理程序,通过选择器过滤。当选择器被省略或null>调用就像.bind()。有一个不明确的情况:如果data参数是一个字符串,>您必须提供选择器字符串或null,以便数据不会被误认为>选择器。传递一个对象的数据,你永远不会担心特殊情况。

+0

这是不正确的js语法我相信。另外,你能否给出一个解释,为什么它修复它? – 2013-05-01 20:59:10

+0

@AlexanderKuzmin解释添加,正在编辑当你的评论进来。 – 2013-05-01 21:04:43

1

您没有事件的锚点。既然你没有其他的包装,文件添加到:

$(document).on("click", "#test", function(){ 
    alert(12); 
}); 

注意:这将在第一次点击唯一的工作,你会被添加多个ID的,这将是重复的。

更好的办法:

$("#addElem").click(function() { 
    $("#elem").append('<a class="test" href="#">this is a test</a><br />'); 
}); 
$(document).on("click", ".test", function(){ 
    alert(12); 
}); 
0

您可以在时间附加功能创建的元素创建它:

$("#elem").append($('<a>', { 
    id: "test. 
    href: "#", 
    text: "this is a test", 
    click: function(e){ 
    e.preventDefault(); 
    alert(12); 
    }) 
).append($("<br>"));