【发布时间】:2019-04-16 16:26:00
【问题描述】:
我有以下 HTML:
<button type="button" id="Button">Go</button>
<div id="validation"></div>
我正在尝试通过以下方式将事件处理程序添加到动态生成的元素:
单击按钮 -> 在 div #validation 中生成元素 X -> 将事件处理程序附加到元素 X
$(document).ready(function(){
ID = 1;
$("#Button").click(function(){
/*generate new div inside div #validation with id #validationID
1st one would be #validation1
it contains a form with name accepterID and a button with name refuserID
1st ones would be accepter1 and refuser1*/
var newline = `
<div id="validation${ID}">
<form name="accepter${ID}">
<input type="hidden" name="name" value="phoegasus">
<button type="submit" value="valider">
</form>
<button name="refuser${ID}">refuser</button>
</div>
`
$("#validation").append(newline);
/*attach event handlers to the generated elements
1st iteration would attach handlers to accepter1 and refuser1 */
$("#validation").on('submit',"form[name^='accepter"+ID+"']",function(e){
$("#validation" + ID).remove();
//remove div validationID after submitting form
});
$("#validation").on('click',"button[name^='refuser"+ID+"']",function(){
$("#validation" + ID).remove();
//remove div validationID
});
ID++;
});
});
当我提交表单或单击生成的按钮时,我想删除包含它们的 div。如果我按下按钮拒绝 1,它应该删除 div #validation1。
生成元素时,处理程序不会附加到它们。
代码在 onclick 事件期间执行时不起作用,但当我在导航器控制台中执行时它起作用。
我尝试在 ID 为 #validation 的 div 上使用 DOMSubtreeModified,但没有成功。
【问题讨论】:
-
创建处理程序时
ID的值是多少?查看包含所有 HTML 和 JS 的完整工作示例将有助于创建新元素并将处理程序添加到它们。话虽如此,似乎最好在您创建的所有元素上使用一个公共类,然后使用单个委托事件处理程序来管理所有元素。 -
您需要提供minimal reproducible example。您的事件处理程序什么都不做,并且缺少创建元素的代码。从您的示例代码中无法判断它不起作用,让我们来确定原因。
-
在创建每个新元素后创建一个唯一的委托事件侦听器,特定于该元素,这似乎是一种反模式。
标签: javascript jquery