gpt4 book ai didi

javascript - 当有多个动态添加的按钮时,不会触发 onclick 事件

转载 作者:行者123 更新时间:2023-11-30 08:51:41 27 4
gpt4 key购买 nike

所以我有 EDIT 和 REMOVE 按钮,它们是为 Firebase 数据库中的每个数据节点(“轮询”)动态添加的。我有一个函数,它使用 jQuery 将 onclick 监听器分配给这些监听器,但奇怪的是,该事件仅在恰好有一个节点时触发,因此只有一对 EDIT/REMOVE 按钮。当有多个节点和多对按钮时,没有一个会触发。这是将事件添加到按钮的 javascript...

function displayCurrentPollsForEditing(pollsRef)
{
var tbl = createTable();
var th = ('<th>Polls</th>');
$(th).attr('colspan', '3');
$(th).appendTo($(tbl).children('thead'));
pollsRef.once('value', function(pollsSnapshot) {
pollsSnapshot.forEach(function(pollsChild) {
var type = pollsChild.name();
// If this is true if means we have a poll node
if ($.trim(type) !== "NumPolls")
{
// Create variables
var pollRef = pollsRef.child(type);
var pollName = pollsChild.val().Name;
var btnEditPoll = $('<button>EDIT</button>');
var btnRemovePoll = $('<button>REMOVE</button>');
var tr = $('<tr></tr>');
var voterColumn = $('<td></td>');
var editColumn = $('<td></td>');
var rmvColumn = $('<td></td>');
// Append text and set attributes and listeners
$(voterColumn).text(pollName);
$(voterColumn).attr('width', '300px');
$(btnEditPoll).attr({
'class': 'formee-table-button',
'font-size': '1.0em'
});
$(btnRemovePoll).attr({
'class': 'formee-table-remove-button',
'font-size': '1.0em'
});
$(btnEditPoll).appendTo($(editColumn));
$(btnRemovePoll).appendTo($(rmvColumn));
// Append to row and row to table body
$(tr).append(voterColumn).append(editColumn).append(rmvColumn);
$(tr).appendTo($(tbl).children('tbody'));
// Append table to div to be displayed
$('div#divEditPoll fieldset#selectPoll div#appendPolls').empty();
$(tbl).appendTo('div#divEditPoll fieldset#selectPoll div#appendPolls');
$(btnEditPoll).click(function() {
displayPollEditOptions(pollRef);
return false;
});
$(btnRemovePoll).click(function() {
deletePoll($(this), pollsRef);
return false;
});

}
});
});
}

标记将类似于以下...

<div id="divEditPoll">
<form class="formee" action="">
<fieldset id="selectPoll">
<legend>SELECT A POLL</legend>
<div class="formee-msg-success">
</div>
<div class="grid-12-12" id="appendPolls">
</div>
</fieldset>
</div>

编辑 - 所以我换了一些行,现在我不设置 click() 事件,直到按钮附加到文档,所以当附加点击事件时,按钮元素肯定在 DOM 中。那么这个问题可能是由于没有为这些按钮设置 id 造成的吗?这对我来说似乎很奇怪,因为我使用变量引用而不是 id 来附加事件。

最佳答案

我会检查两件事。

首先,确保您没有两个具有相同 ID 的元素。如果这样做,jquery 可能只绑定(bind)到第一个,或者根本不绑定(bind)。

其次,确保在 jquery 尝试绑定(bind)点击事件之前将元素添加到 dom。如果代码异步运行(如果您使用的是 ajax,则很容易发生这种情况),那么您可能会尝试在创建元素之前绑定(bind)事件。 Jquery 将无法找到该元素然后默默地放弃。

关于javascript - 当有多个动态添加的按钮时,不会触发 onclick 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17396817/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com