动态插入按钮不响应'onclick'

时间:2017-07-18 13:50:23

标签: jquery

我无法让我的按钮响应点击次数。我使用html()方法生成了这个按钮:

var button1 = '<button class="btn btn-default" id="button1">Back</button>';
$(".component").html(button1);

此按钮在屏幕上呈现,但不起作用,单击时没有任何反应。

$("#button1 ").on('click',function(e){
        console.log("clicked");
});

手工插入的相同html代码(硬编码)工作正常。

4 个答案:

答案 0 :(得分:2)

您可能需要委托事件处理程序,但在这种情况下,只使用jQuery创建元素可以解决问题并且看起来更好。

&#13;
&#13;
var button1 = $('<button />', {
  'class' : 'btn btn-default',
  id      : 'button1',
  text    : 'Back',
  on      : {
    click : function() {
      console.log('clicked');
    }
  }
});

$(".component").html(button1);
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="component"></div>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

您应该将事件委托给加载DOM后创建的元素。

$(document).on('click','#button1',function(e){
        console.log("clicked");
}

答案 2 :(得分:0)

这是因为当您的浏览器读取页面时,jquery会绑定您的点击事件。 当您动态插入按钮时,它没有绑定事件。

您应该在注入按钮的代码之后放置绑定click事件的代码。或者将关于click事件的代码放在函数中,并在新注入的按钮需要处理click事件时调用它。

答案 3 :(得分:0)

您的代码中存在一些错误。

按钮1后面有空格

$("#button1 ")

你在);函数之后已经onclick了。

有一个完美运行的代码

var button1 = '<button id="button1">Back</button>';
$(".component").append(button1);
$("#button1").on('click', function() {
  alert("clicked");
});
.component {
  width: 200px;
  height: 200px;
  border: solid 2px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div class="component">

</div>

最好使用.append()而不是.html()因为.html()会覆盖容器的整个html内容。