jquery禁用所有事件和启用

时间:2013-06-13 10:45:57

标签: jquery click

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

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

仍然被解雇了。

4 个答案:

答案 0 :(得分: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在评论中提出了一个很好的建议:如果您添加和删除某个类而不是使用.data,那么您还可以同时对该元素进行样式设置

它的工作方式非常相似:

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

// ... 

$("#a").click(function(e){
    if ($(this).hasClass('disabled')) {
       // ...
    }
    // ...
});

答案 1 :(得分:2)

“Normal”元素不支持disabled属性,该属性通常用于输入元素。

您有几个选择:

  1. 使用.off()
  2. 取消注册每个事件处理程序
  3. 将一个完全相同大小的子元素放在将接收所有事件的元素之上,并防止它们传播到其父级。
  4. 使用一个标志,事件处理程序在触发时可以读取该标志以决定是否继续
  5. 选项2通常由“模态”对话框使用,该对话框覆盖整个窗口并带有覆盖图,以防止事件到达页面。

答案 2 :(得分:0)

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

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

并添加/删除班级

答案 3 :(得分:-1)

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

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

您无法禁用每个元素。