所以我有这个按钮会在表格中添加一个新行,但我的问题是它在发布追加方法后不再听.new_participant_form
点击事件。
单击“添加新条目”,然后单击“表单”名称。
$('#add_new_participant').click(function() {
var first_name = $('#f_name_participant').val();
var last_name = $('#l_name_participant').val();
var role = $('#new_participant_role option:selected').text();
var email = $('#email_participant').val();
$('#registered_participants').append('<tr><td><a href="#" class="new_participant_form">Participant Registration</a></td><td>'+first_name+ ' '+last_name+'</td><td>'+role+'</td><td>0% done</td></tr>');
});
$('.new_participant_form').click(function() {
var $td = $(this).closest('tr').children('td');
var part_name = $td.eq(1).text();
alert(part_name);
});
});
<table id="registered_participants" class="tablesorter">
<thead>
<tr>
<th>Form</th>
<th>Name</th>
<th>Role</th>
<th>Progress </th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="#" class="new_participant_form">Participant Registration</a></td>
<td>Smith Johnson</td>
<td>Parent</td>
<td>60% done</td>
</tr>
</tbody>
</table>
<button id="add_new_participant"></span>Add New Entry</button>
答案 0 :(得分:162)
使用on:
$('#registered_participants').on('click', '.new_participant_form', function() {
这样点击就会委托给#registered_participants
中具有类new_participant_form
的任何元素,即使它是在绑定事件处理程序后添加的。
答案 1 :(得分:21)
.on()
method用于将事件委托给元素,动态添加或已经存在于DOM中:
// STATIC-PARENT on EVENT DYNAMIC-CHILD
$('#registered_participants').on('click', '.new_participant_form', function() {
var $td = $(this).closest('tr').find('td');
var part_name = $td.eq(1).text();
console.log( part_name );
});
$('#add_new_participant').click(function() {
var first_name = $.trim( $('#f_name_participant').val() );
var last_name = $.trim( $('#l_name_participant').val() );
var role = $('#new_participant_role').val();
var email = $('#email_participant').val();
if(!first_name && !last_name) return;
$('#registered_participants').append('<tr><td><a href="#" class="new_participant_form">Participant Registration</a></td><td>' + first_name + ' ' + last_name + '</td><td>' + role + '</td><td>0% done</td></tr>');
});
<table id="registered_participants" class="tablesorter">
<thead>
<tr>
<th>Form</th>
<th>Name</th>
<th>Role</th>
<th>Progress </th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="#" class="new_participant_form">Participant Registration</a></td>
<td>Smith Johnson</td>
<td>Parent</td>
<td>60% done</td>
</tr>
</tbody>
</table>
<input type="text" id="f_name_participant" placeholder="Name">
<input type="text" id="l_name_participant" placeholder="Surname">
<select id="new_participant_role">
<option>Parent</option>
<option>Child</option>
</select>
<button id="add_new_participant">Add New Entry</button>
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
答案 2 :(得分:6)
使用jQuery 1.7+版本的.on
提到的问题可以解决。
不幸的是,这在我的代码中没有用(我有1.11)所以我使用了:
$('body').delegate('.logout-link','click',function() {
http://api.jquery.com/delegate/
从jQuery 3.0开始,.delegate()已被弃用。它被取代了 自jQuery 1.7以来的.on()方法,所以它的使用已经存在 泄气。然而,对于早期版本,它仍然是最多的 有效的方法来使用事件委托。有关活动的更多信息 绑定和委托是在.on()方法中。一般来说,这些都是 这两种方法的等效模板:
// jQuery 1.4.3+
$( elements ).delegate( selector, events, data, handler );
// jQuery 1.7+
$( elements ).on( events, selector, data, handler );
此评论可能有助于其他人:)!
答案 3 :(得分:1)
**问题已解决** //更改为委托()方法以使用正文中的委托
$("body").delegate("#boundOnPageLoaded", "click", function(){
alert("Delegated Button Clicked")
});
答案 4 :(得分:1)
尝试
从jQuery 1.7+版本开始,on()方法是对bind(),live()和委托()方法的新替代。
所以添加了这个
$(document).on("click", "a.new_participant_form" , function() {
console.log('clicked');
});
或者有关更多信息,CHECK HERE