javascript - 添加到 document.body 的 innerHTML 导致 jQuery .on() 找不到它的目标

标签 javascript jquery html onclick dynamically-generated

所以我有一些动态生成的 HTML 内容。如果您单击一个按钮,它会添加一些带有另一个按钮的 html,您可以多次添加其他 html,生成多个副本。这一切都在 <form> 中标签,所以我需要使用 e.preventDefault()在每个按钮上,以防止 javascript 尝试提交数据。每个按钮也有自己的代码 onclick .但是,在新生成的内容上添加 javascript 的点击事件存在问题。如果我有 <button class="myBtn"></button> ,然后在 javascript 中我有 $(".myBtn").click(...) ,这会很好地工作,但仅适用于运行 javascript 代码时已经存在的按钮,这意味着新生成的按钮不会附加事件。已找到该问题的解决方案 here .

现在我们来谈谈真正的问题。这一切都很完美,但只有在我添加到 document.body.innerHTML 之前.一旦我执行 document.body.innerHTML += "Text" 行,单击生成的按钮时,上面链接中的代码不再执行。

我这里有一个例子:https://jsfiddle.net/6hvgatLy/1/

最佳答案

您正在重写整个 body innerHTML,这将删除所有事件监听器

改用append()

改变

$("#deadlyBtn").click(function(e){
    e.preventDefault(); 
    document.body.innerHTML += "Now try clicking [Add new Input]"
})

$("#deadlyBtn").click(function(e){
    e.preventDefault(); 
    $('body').append("Now try clicking [Add new Input]")
})

DEMO

或者,您可以将事件委托(delegate)更改为未被覆盖的 Assets ,例如 bodydocument

$(document).on("click", ".formDiv .innerContainer .innerBtn", function(e){
    e.preventDefault()
  $(this).before($('<input type="text" placeholder="Textbox"/>'))
})

关于javascript - 添加到 document.body 的 innerHTML 导致 jQuery .on() 找不到它的目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40076582/

相关文章:

php - 从其他网站剪辑图像并将其添加到我的网站

javascript - 使用 Jquery 创建具有点击和悬停功能的菜单

jquery - 模态是之前模态的 "remembering"代码

javascript - 将鼠标悬停并单击 li 元素更改类

javascript - 未捕获的类型错误 : Cannot read property 'resource' of undefined

javascript - 命名事件处理程序方法 "onEvent"的用例有哪些

javascript - 响应式侧滚动博客页面问题

javascript - Angular 6 将值(value)从一项服务传递到另一项服务?

附加 Javascript 图像吗?

html - 如何缩放和居中内联 SVG?