JQuery .on方法没有响应
JQuery .on method not responding
我使用Jquery 2.1.0。我已经将一些元素注入DOM(包含label
)到div
元素中。我使用以下JavaScript来处理所有标签上的单击事件,但它完全死了,没有响应。我检查了一下,Jquery被加载了。
$('label').on("click", function () {
var ul = $(this).parent().children("ul:first");
if (ul.is(':visible')) {
ul.css({ "display": "none" });
}
else {
ul.css({ "display": "block" });
}
});
我在IE 10中使用了开发工具并调试了代码。当我按下F5,它去我的断点(在我的代码的第一行),但当我点击一个label
没有发生,没有错误。
这只会将事件处理程序分配给最初存在于页面上的label
元素:
$('label').on("click", function () {
// ...
});
要捕获以后添加的元素,您需要将事件处理程序分配给一个公共父元素(在页面生命周期内不会添加/删除),并过滤源元素,如下所示:
$(document).on('click', 'label', function () {
// ...
});
注意有两个选择器:
-
document
-
'label'
是事件处理程序的目标,它只在页面加载时(或者在计算这行代码时,通常是在页面加载时)对求值一次。这将处理程序附加到document
对象。由于所有事件"冒泡"到父元素,这将捕获页面上所有单击事件(当然,除非明确停止传播)。
第二个是.on()
方法处理程序的"过滤器",在该处理程序捕获事件时对其求值。它过滤掉引起click
事件的元素,这样处理程序只对那些匹配过滤器的元素执行。
我最近写了一篇关于这个话题的博文
你需要使用事件委托因为你的标签是动态创建的元素:
事件委托允许我们将单个事件侦听器附加到父元素,它会为所有匹配选择器的子元素触发,这些子节点现在是否存在,或者将来是否会添加。
$('body').on('click','label', function() {
// Your code here
});
基本上,事件委托将帮助您将单击事件附加到新添加的label
元素中
应该使用事件委托
$(document).on("click","label",function(){
});
事件委托允许您将单个事件侦听器附加到父元素,该侦听器将为匹配选择器的所有子元素触发,无论这些子元素现在存在还是将来添加。
从这个答案到这里的另一个问题:https://stackoverflow.com/a/8337382/2407870
似乎该方法不适用于Chrome中的一些内联元素。如果你的元素是内联的,试着把显示改成block。
- Ember.js:将Em.$.getJSON转换为promise并将响应绑定到控制器上下文的正确方法
- jQuery/Ajax-试图通过Ajax创建POST方法并获得对HTML的响应
- 画布如何在paperJs中使用pathData方法做出响应
- 从javaspring方法管理http.get响应
- 有没有任何方法可以从javascript进行跨域请求,并访问它可能生成的错误响应类型(401404等)
- jQuery$.ajax方法.成功:使用响应数据的函数
- 无法调用方法'发送'express js中未定义的(响应未定义)
- 试图理解返回javascript方法的服务器响应
- 创建响应图像的最简单方法是什么
- 制作预制响应功能的最佳方法是什么
- 无法解析javascript中的json字符串,这是java方法的响应
- 跨域 Post 方法 ajax 调用使用 jQuery 和 XML 响应
- 检查 JSON 响应是空还是空的最佳方法
- 是否存在任何使用 sass/指南针进行响应式菜单的方法
- Tumblr API 标记方法 - URL 没有相应的响应
- 在 ajax 响应中调用应用程序配置方法 - AngularJS
- 重写Node.js Express响应方法
- Sailsjs:基于请求参数设置响应方法
- 服务器和客户端之间的响应方法错误
- ASP.NET WebMethod以json形式返回对象,但不在响应方法中