2014-08-29 59 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