我的常规 onclick 事件,就像这样有效:
$(document).ready(function () {
$("#guestlist .viewguestdetails").click(function () {
$(".guestdetails[data-id='18']").toggle();
});
});
但是,当该 onclick 事件在动态 HTML 上时,即我要插入到表中的行时,它不再起作用。如:什么都没有发生。所以我查看了这篇文章:动态创建元素上的事件绑定?
正如那里所回答的那样,使用 .on() 方法。
我向这个 tr 元素添加了一个类 newrow,现在有了这个:
$(document).ready(function () {
$('.newrow').on('click', 'span', function () {
$(".guestdetails[data-id='" + $(this).attr('data-id') + "']").toggle();
});
});
在这里,我正在构建一个新行并插入:
var newrow='';
newrow += '<tr class="newrow" data-id="' + id + '">';
newrow += '<td class="alignleft sorting_1"><span class="viewguestdetails" data-id="' + id + '">' + firstname + ' ' + lastname + '</span>';
newrow += ' <span class="completeguestdetails" data-id="' + id + '">(' + $("#completedetails").attr('data-message') + ')</span><br/>';
newrow += '<div class="guestdetails" data-id="' + id + '">';
newrow += SOME DATA';
newrow += '</div>';
newrow += '</td>';
//add checkboxes
var checkstatus = 'off';
newrow += '<td><span class="attendance checkbox-' + checkstatus + '" data-id="' + id + '" data-daypart="day"></span></td>';
newrow += '<td><span class="attendance checkbox-' + checkstatus + '" data-id="' + id + '" data-daypart="ceremony"></span></td>';
newrow += '<td><span class="attendance checkbox-' + checkstatus + '" data-id="' + id + '" data-daypart="reception"></span></td>';
newrow += '<td><span class="attendance checkbox-' + checkstatus + '" data-id="' + id + '" data-daypart="diner"></span></td>';
newrow += '<td><span class="attendance checkbox-' + checkstatus + '" data-id="' + id + '" data-daypart="party"></span></td>';
newrow += '</tr>';
//add the row to the guestlist table
$('#guestlist tbody').prepend(newrow);
我使用了 jQuery 调试器(https://chrome.google.com/webstore/detail/jquery-debugger/dbhhnnnpaeobfddmlalhnehgclcmjimi),发现在插入的行或其中的 span 标签上,没有附加 jQuery 事件。
我错过了什么?
更新 我添加了这个并将它移到了 document.ready() 函数之外。在这种情况下,事件被附加:
$('#guestlist').on('click', 'span.viewguestdetails', function () {
$(".guestdetails[data-id='" + $(this).attr('data-id') + "']").toggle();
});
但是,已经存在的行不再起作用。可能是因为我的 document.ready() 中还有这个:
$("#guestlist .viewguestdetails").click(function () {
$(".guestdetails[data-id='" + $(this).attr('data-id') + "']").toggle();
});
所以,现在,要么新插入的行函数正确,要么已经存在的行函数正确。
为什么?