我在无序列表中的一些文本之后呈现了这个按钮:

按钮的HTML如下所示:
<a
data-action="remove"
data-class-name="ECEC 301 Advanced Programming for Engineers Lab"
class="btn btn-danger remove-item btn-xs btn-font-12-px btn-raised margin-add-to-cart mdi-content-remove-circle-outline">
</a>这是它内的无序列表元素:

我试图编写一些在单击按钮时调用操作的jQuery,但是无论我写什么,我都不能注册单击操作,例如:
$('.btn.btn-danger.remove-item').on('click', function(){
console.log("you should see this");
});
$("[data-action]").click(function() {
console.log("yeah");
});
$('a[data-action="remove"]').click(function() {
console.log("yeah");
});编辑:按钮是在使用jQuery加载页面后动态创建的(我调用JSON来创建无序的类列表)
发布于 2015-08-22 05:22:12
因为按钮是动态生成的,所以需要使用事件委托
$(document).on('click','.btn.btn-danger.remove-item', function(){
console.log("you should see this");
});事件委托是指使用事件传播(冒泡)来处理DOM中高于事件起源元素的事件的过程。它允许我们为现在或将来存在的元素附加一个事件侦听器。
发布于 2015-08-22 05:25:47
问题是添加单击处理程序时元素不存在。
基本上,您是在说“嗨jquery,找到这个元素,当它被点击时执行XYZ”。jQuery寻找它,找不到任何东西(因为元素还没有被创建),而且因为它很冷,所以它不会对您说任何关于它的事情(如果它总是出错的话,那就太烦人了)。
解决这个问题的方法是使用事件委托。这意味着将事件附加到将在其中的元素,然后jQuery筛选发送到该父元素的每个事件,并检查触发该事件的事件是否发生在与选择器匹配的元素上。
这听起来可能很复杂,但却是直接的。你所需要做的就是更新
$(".btn.btn-danger.remove-item").on("click...
到这个
$(document).on("click", ".btn.btn-danger.remove-item"...
https://stackoverflow.com/questions/32152580
复制相似问题