javascript - jQuery 不检测当前类

标签 javascript jquery css

我有一个 JavaScript 函数,我可以在其中更改按钮的类 (<a href="..." class="button" id="placeOrdersButton">Button</a>):

function showOrderButtonActive(isActive) {
        if (isActive) {
            $("#placeOrdersButton").addClass("button");
            $("#placeOrdersButton").removeClass("buttonDisabled");
        } else {
            $("#placeOrdersButton").removeClass("button");
            $("#placeOrdersButton").addClass("buttonDisabled");
        }

我还有一个 JavaScript 函数,可以在单击已启用的按钮时显示加载面板:

$("a:not([target='_blank'], [class='buttonDisabled'])").on("click", function (e) {
        window.LoadingPanel.Show();
    });

但是当我的 JavaScript 函数将类更改为 buttonDisabled 时它仍然显示加载面板。

为什么 jQuery 不检测当前的类名,我怎样才能以最好和最简洁的方式做到这一点?

最佳答案

代码运行如下:

// [1] Retrieve all elements that match the selector *at the existing time*
$("a:not([target='_blank'], [class='buttonDisabled'])")

// [2] Attach a click event to those elements
.on("click", function (e) {
    window.LoadingPanel.Show();
});

所以如果一个元素的类改变了,它不会影响上面的代码。上面的代码已经运行并将事件附加到给定的元素。

一个解决方案是 event delegation ,您将事件附加到父元素并在事件期间检查选择器:

// [1] Retrieve document
$(document)

// [2] Attach a click event to the document that will fire
//     if and only if the event started at or bubbled up through
//     the given selector
.on("click", "a:not([target='_blank'], [class='buttonDisabled'])", function (e) {
    window.LoadingPanel.Show();
});

关于javascript - jQuery 不检测当前类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32719623/

相关文章:

javascript - 如何在javascript中检索用户代理值(代理未定义)?

javascript - ng-include 内部和外部的 $scope 行为不同

javascript - jquery .val() 返回未定义

javascript - 如何在窗口调整大小时取消 Jquery 函数?

javascript - Bootstrap 网格问题(如何解决任务)

javascript - 在页面或元素加载时调用 JS

html - 使用 img 覆盖修改插入符号

html - 如何减少表格单元格之间的空间?

html - 使用 CSS 使悬停在一个对象上影响另一个对象

javascript - 无法实例化模块 ngRoute