추가 메소드 후 Jquery 클릭 이벤트가 작동하지 않음
그래서 테이블에 새 행을 추가하는이 버튼이 있지만 내 문제는 .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);
});
});
HTML
<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>
사용 에 :
$('#registered_participants').on('click', '.new_participant_form', function() {
따라서 이벤트 핸들러를 바인딩 한 후에 추가 된 경우에도 #registered_participants
클래스 를 갖는 모든 요소에 클릭이 위임됩니다 new_participant_form
.
이 .on()
메서드 는 동적으로 추가되거나 이미 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>
자세히보기 : http://api.jquery.com/on/
이 문제는 .on
jQuery 1.7+ 버전에서 언급 한대로 해결할 수 있습니다 .
Unfortunately, this didn't work within my code (and I have 1.11) so I used:
$('body').delegate('.logout-link','click',function() {
http://api.jquery.com/delegate/
As of jQuery 3.0, .delegate() has been deprecated. It was superseded by the .on() method since jQuery 1.7, so its use was already discouraged. For earlier versions, however, it remains the most effective means to use event delegation. More information on event binding and delegation is in the .on() method. In general, these are the equivalent templates for the two methods:
// jQuery 1.4.3+
$( elements ).delegate( selector, events, data, handler );
// jQuery 1.7+
$( elements ).on( events, selector, data, handler );
This comment might help others :) !
참고URL : https://stackoverflow.com/questions/15420558/jquery-click-event-not-working-after-append-method
'Programing' 카테고리의 다른 글
PHP에서 ++ $ i와 $ i ++의 차이점은 무엇입니까? (0) | 2020.10.31 |
---|---|
IEnumerable을 일괄 적으로 반복하는 방법 (0) | 2020.10.31 |
InternalsVisibleTo 속성이 작동하지 않습니다. (0) | 2020.10.31 |
결국 실행되도록 자바 스크립트 함수를 대기열에 저장하는 방법 (0) | 2020.10.31 |
터미널에서 vim을 사용하는 방법은 무엇입니까? (0) | 2020.10.31 |