Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery,从类触发事件_Javascript_Jquery_Events - Fatal编程技术网

Javascript jQuery,从类触发事件

Javascript jQuery,从类触发事件,javascript,jquery,events,Javascript,Jquery,Events,请看一下下面的代码和提琴 代码 小提琴: 我基本上是试图在按下按钮时在元素上切换“clickEnabled”类。切换在边框更改时起作用,但是clickEnabled类不响应单击事件设置事件处理程序时没有。clickEnabled元素。您仍然可以捕获单击事件,不过: $(document).on("click", ".clickEnabled", function(){ alert("Hello, world!"); });​ 更改: $(".clickEnabled").click(f

请看一下下面的代码和提琴

代码

小提琴:


我基本上是试图在按下按钮时在元素上切换“clickEnabled”类。切换在边框更改时起作用,但是clickEnabled类不响应单击事件

设置事件处理程序时没有
。clickEnabled
元素。您仍然可以捕获单击事件,不过:

$(document).on("click", ".clickEnabled", function(){
    alert("Hello, world!");
});​
更改:

$(".clickEnabled").click(function (e) {
    alert('clicked');   
});
致:

正如@araxanas提到的,
.clickEnabled
在加载时不存在。因此,我将选择器切换到
。clickable
,它可以。但是,您只希望在启用单击时处理它们。这就是为什么我添加了条件。仅当单击的元素具有
clickEnabled
类时,它才会发出警报


此外,它可能有助于将css移出javascript,这样您可以直观地看到类是否存在,请参阅我的更新。

问题是,在加载页面时,单击事件处理程序不绑定任何元素(因为没有类为“clickEnabled”的元素)

解决方案是将.click()方法更改为.live()方法:


这不是因为每次单击文档都会遍历dom树,所以效率低下吗?您不必这样做。请参阅我的答案以获取替代方案。
live
在jQuery>1.7中不推荐使用。我喜欢您的答案,因为它效率高,但在绑定和解除绑定事件时,它无法与我的代码一起使用。
$(".clickEnabled").click(function (e) {
    alert('clicked');   
});
$(".clickable").click(function (e) {
    if ( $(this).hasClass("clickEnabled") )
    {
        alert('clicked');   
    }
});
$(".clickEnabled").live('click', function (e) {
    alert('clicked');
});