2014-08-29 48 views
0

为什么我从jquery生成的按钮没有事件?为什么我从jquery生成的按钮没有事件?

<input type='button' value='Populate' id='pop'/> 
<input type='button' value='Click' id='btn'/> 
$('#pop').on('click', function(){ 
    var clone = $('input[id*=btn]').clone(); 
    $(this).after(clone); 
}); 

$('#btn').on('click', function(){ 
    alert('clicked'); 
}); 

fiddle

+0

您需要了解[事件委托](http://learn.jquery.com/events/event-delegation/)。 – 2014-08-29 08:42:33

回答

0

您在应用事件侦听器的后正在创建克隆按钮。当克隆()一个元素只有 DOM结构被克隆,事件不是。

无论用户Event Delegation或简单地传递trueclone()功能把它克隆事件也(按照the spec

$('#pop').on('click', function(){ 
    var clone = $('input[id*=btn]').clone(true); // < pass true here 
    $(this).after(clone); 
}); 

DEMO:http://jsfiddle.net/rvhhv8sf/3/

P.S. Id必须是唯一的;)

+0

感谢您的解释。它现在有效。 – Ian 2014-08-29 09:01:02

+0

不客气;) – Moob 2014-08-29 09:01:22

2

标识的应该是唯一的。所以把你的ID号码btn改成了课程。使用event-delegation。试试这个:

$(document).on('click','.btn', function(){ 
    alert('clicked'); 
}); 

DEMO

+0

谢谢!真的很感谢 – Ian 2014-08-29 09:01:35

+0

@Ian:欢迎:) – Unknown 2014-08-29 09:04:28

0

要复制的ID是错的只是复制类代替。

<input type='button' value='Populate' id='pop'/> 
<input type='button' value='Click' id='btn' class="btn"/> 


$(document).on('click','.btn',function(){ 
    alert('clicked'); 
}); 

试试这个(根据你的问题):

$(document).on('click','#btn',function(){ 
    alert('clicked'); 
}); 

编辑:

小提琴链接: - http://jsfiddle.net/nLkvejss/

+0

@伊恩..我认为我的答案没有错是不.. ..? – 2014-08-29 09:20:44

0

试试这个:

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

我认为当你为你的内涵添加一些解释时,它对OP和更多的访问者会更有帮助。 – reporter 2014-08-29 08:48:58

相关问题