jQuery on event不适用于未来的选择器

时间:2012-12-27 12:50:32

标签: jquery event-delegation

我有一个模态窗口。在其中有一个id为 WebPartWPQ2 的表,它将在三种不同的状态下有三个不同的类。这些类 ms-applyfiltersinactive ms-applyfiltersactive ms-applyfiltershoverover 即可。最初,当弹出模态窗口时,该表将具有 ms-applyfiltersinactive 类。只有在更改其中的选择框中的选项时,表的类才会更改为 ms-applyfiltersactive ,然后在鼠标悬停时,类将更改为 ms-applyfiltershoverover 。关闭窗口时,表的类重置为 ms-applyfiltersinactive

要求是我需要在桌面上有一个点击事件,只要它处于活动状态,即有一个类 ms-applyfiltersactive ms-applyfiltershoverover

我正在使用

$(document).on("click","#WebPartWPQ2 .ms-applyfiltersactive, #WebPartWPQ2 .ms-applyfiltershoverover", function(){
    alert("Clicked");
});

无法将click事件附加到表中。这可能是因为表的类是 ms-applyfiltersinactive

如果我使用以下代码

$(document).on("click","#WebPartWPQ2 table[class*='ms-applyfilter']", function(){
    alert("Clicked again");
});

在我不想要的所有三种情况下都会触发事件。

我尝试使用 hasClass 事件过滤掉选择器。

$(document).on("click","#WebPartWPQ2 table[class*='ms-applyfilter']", function(){
    alert($(this).is("table.ms-applyfiltersactive"));
});

但是当表有任何类时,它会返回相同的布尔值。

请帮我解决这个问题。

1 个答案:

答案 0 :(得分:0)

没有HTML,我无法使用您当前的代码。但是,我已经创建了一个应该有帮助的例子。

我建议你做以下事情:

JAVASCRIPT:

$(document).on("click","#WebPartWPQ2", function(){
    switch($("#WebPartWPQ2").attr("class")){
        case 'ms-applyfiltersinactive':
            //do something
            break;
        case 'ms-applyfiltersactive':
            //do something
            break;
        case 'ms-applyfiltershoverover':
            //do something
            break;    
    }
});    

DEMO:http://jsfiddle.net/PKWKn/11/

希望这有帮助!