jQuery,来自Class的触发事件

时间:2012-07-25 17:07:39

标签: javascript jquery events

请看下面的代码和小提琴。

CODE

$("#enable").click(function(e) {
    if (!$("#enable").data('isOn')) {
        $("#holder").find('.clickable').each(function(d) {
            $(this).css('border', '1px solid red');
            $(this).addClass('clickEnabled');
        });
        $("#enable").data('isOn', true);
    } else {
        $("#holder").find('.clickable').each(function(d) {
            $(this).css('border', '');
            $(this).removeClass('clickEnabled');
        });
        $("#enable").data('isOn', false);

    }

});

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

小提琴: http://jsfiddle.net/qAuwt/

我基本上试图在按下按钮时在元素上切换“clickEnabled”类。切换正在边界正在改变,但clickEnabled类没有响应点击事件

3 个答案:

答案 0 :(得分:2)

设置事件处理程序时没有.clickEnabled个元素。但您仍然可以捕获click事件:

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

答案 1 :(得分:1)

更改:

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

要:

$(".clickable").click(function (e) {
    if ( $(this).hasClass("clickEnabled") )
    {
        alert('clicked');   
    }
});

正如@araxanas所提到的,.clickEnabled在加载时不存在。所以我将选择器切换到.clickable,这样做。但是,您只想在启用时处理点击。这就是我添加条件的原因。它仅在被点击的元素具有clickEnabled类时才会发出警告。

此外,将jss移出javascript可能会有所帮助,这样您可以直观地看到该课程是否存在,请参阅我更新的fiddle

答案 2 :(得分:-1)

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

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

$(".clickEnabled").live('click', function (e) {
    alert('clicked');
});