0

我试图使用 jquery .prop 函数禁用属性。我用过:
$("#a, #b").prop('disabled', true); 现在,如果我在 Chrome 开发人员工具上检查它,我可以看到 disabled 属性未应用于两个元素。当我硬编码输入它时,事件仍然触发,就好像它没有被禁用一样。

$("#a").click(function(){
    alert("ASD");
    });

还是被解雇了。

4

4 回答 4

3

如前所述,disabled图像和表格单元格不支持该属性。

如果您不想解除绑定事件处理程序,您可以设置一个标志。然后,您可以通过测试处理程序中的标志来阻止执行事件处理程序和传播事件:

$("#a, #b").data('disabled', true);

// ...    

$("#a").click(function(e){
    if ($(this).data('disabled')) {
        e.preventDefault();
        e.stopPropagation();
        return;
        // or just `return false;` instead of explicitly calling the methods
    }
    alert("ASD");
});

Beetroot-Beetroot在他们的评论中提出了一个很好的建议:如果你添加和删除一个类而不是 using .data,那么你也可以同时为元素设置相应的样式

它的工作原理非常相似:

$("#a, #b").addClass('disabled');
// and .removeClass or .toggleClass to remove the class

// ... 

$("#a").click(function(e){
    if ($(this).hasClass('disabled')) {
       // ...
    }
    // ...
});
于 2013-06-13T10:55:19.263 回答
2

“普通”元素不支持disabled通常用于输入元素的属性。

你有几个选择:

  1. 注销每个事件处理程序.off()
  2. 将大小完全相同的子元素放在将接收所有事件并阻止它们传播到其父级的元素之上。
  3. 使用事件处理程序在触发时可以读取的标志来决定是否继续

选项 2 经常被“模态”对话框使用,它用覆盖覆盖整个窗口以防止事件到达页面。

于 2013-06-13T10:55:23.120 回答
0

您提到的元素不支持该属性。您可以改为切换课程。

$('#a').click(function() {
if ($(this).hasClass('yes')) {...} else {...}
});

并添加/删除类

于 2013-06-13T10:47:47.313 回答
-1

如果“禁用”是 #a 和 #b 的有效属性/属性,请尝试以下操作:

$("#a, #b").prop("disabled", "disabled");

您不能禁用每个元素。

于 2013-06-13T10:48:50.910 回答