遵循最佳实践,使用回调函数并处理最初的父加载div,我这样做了:
$("#buttons_div").
html('<input type="button" value="Click me" id="button1" />', function() {
$("#buttons_div").
on("click", "#button1", function() {
alert("alert")
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="buttons_div">
</div>
为什么这不起作用?
答案 0 :(得分:2)
这不会奏效。这两个陈述应该是分开的。您不能将事件处理程序作为参数传递给.html()
函数。你需要这样做:
$(function() {
$("#buttons_div").html('<input type="button" value="Click me" id="button1" />');
$("#buttons_div").on("click", "#button1", function() {
alert("alert")
});
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="buttons_div">
</div>
&#13;
答案 1 :(得分:2)
对于动态生成的元素,直接JavaScript函数不适用于该元素。因此,您必须使用该动态生成的元素的父元素,或者您可以使用document而不是该父元素。
$(function() {
$("#buttons_div").html('<input type="button" value="Click me" id="button1"
/>');
$(document).on("click", "#button1", function() {
alert("alert")
});
});
或者你也可以这样做:
$(function() {
$("#buttons_div").html('<input type="button" value="Click me" id="button1"
/>');
$("#buttons_div").on("click", "#button1", function() {
alert("alert")
});
});
答案 2 :(得分:1)
这是因为您将click事件嵌套在html()
函数中。
$("#buttons_div").html('<input type="button" value="Click me" id="button1" />');
$("#buttons_div").on("click", "#button1", function(){
alert("alert")
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="buttons_div">
</div>
&#13;