首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.click未在按钮上注册

.click未在按钮上注册
EN

Stack Overflow用户
提问于 2015-08-22 05:15:04
回答 2查看 2K关注 0票数 3

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

按钮的HTML如下所示:

代码语言:javascript
复制
<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,但是无论我写什么,我都不能注册单击操作,例如:

代码语言:javascript
复制
$('.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来创建无序的类列表)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-22 05:22:12

因为按钮是动态生成的,所以需要使用事件委托

代码语言:javascript
复制
$(document).on('click','.btn.btn-danger.remove-item', function(){
    console.log("you should see this");
});

事件委托是指使用事件传播(冒泡)来处理DOM中高于事件起源元素的事件的过程。它允许我们为现在或将来存在的元素附加一个事件侦听器。

摘自:http://learn.jquery.com/events/event-delegation/

票数 4
EN

Stack Overflow用户

发布于 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"...

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32152580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档