Javascript 如何在chrome和firefox中右键单击时禁用/启用复选框

Javascript 如何在chrome和firefox中右键单击时禁用/启用复选框,javascript,jquery,right-click,Javascript,Jquery,Right Click,我编写了一些代码,允许我在右键单击复选框时禁用/启用它们。它适用于IE,但不适用于Chrome或Firefox rightClickFunc: function (e) { var obj; if ($.browser.msie) obj = event.srcElement; else obj = e.target; stuff.disableEnableObject(obj); return false; }, disableEnableObjec

我编写了一些代码,允许我在右键单击复选框时禁用/启用它们。它适用于IE,但不适用于Chrome或Firefox

rightClickFunc: function (e) 
{
    var obj;
    if ($.browser.msie) obj = event.srcElement;
    else obj = e.target;
    stuff.disableEnableObject(obj);
    return false;
},

disableEnableObject: function (o)
{
    if (o.getAttribute("disabled") == null)                
          $('#'+o.id).attr("disabled", "disabled");
    else  $('#'+o.id).removeAttr("disabled");
}
如何在Chrome中获得与IE相同的功能? 问题似乎在于,在chrome中的禁用项上单击鼠标右键会打开上下文菜单(右键单击菜单)

我制作了一个代码示例-请参阅。在IE和chrome中运行它以查看差异。(IE可以启用框,Chrome无法)


我希望另一个浏览器在功能上与IE相同,因此可以启用框。

它可以禁用元素,但不能重新启用它。这是因为禁用的元素不会触发鼠标事件。我不认为有一种方法可以让它在所有浏览器中工作。

根据规范,禁用的元素不应响应单击事件


您要做的是在其上覆盖一个不可见(
opacity:0
)元素,并将其用作事件的代理。请记住,一些旧浏览器不理解
不透明度

这将是一个很大的工作,但从技术上讲,当您禁用元素时,您可以在其上堆叠一个透明的元素(因此用户看不到它),大小/形状相同,并侦听单击事件。启用后,隐藏该堆叠元素

以下是一些让您开始学习的内容:

它使用这种结构:

<span>
    <input id='a' type='checkbox' disabled="disabled" />
    <span class="disabled-detector"></span>
</span>
请注意,您仍然可以“单击”禁用的元素


您必须对其进行更新,以确保
单击
(或
上下文菜单
)事件同时以
输入
和透明元素为目标。从技术上讲,您可以只使用父级
——给它一个特殊的类,并监听
单击该类上的事件。事件将从其子体中冒泡出来,因此这应该是很好的。

这将是一个很大的工作,但从技术上讲,当您禁用元素时,您可以在其顶部堆叠一个透明的元素(因此用户看不到它),大小/形状相同,并侦听该
单击
事件。启用后,隐藏/移除堆叠元素+1,以便通过小提琴和初步研究解决问题@Ian我想你是说“透明元素”?还要注意,这段代码在页面上的每个项目上都禁用了上下文菜单。@ben336是的,我想是这样。哈哈,我更改了它,谢谢当你说“根据规范”时,你指的是什么规范?:
禁用
当为表单控件设置时,此布尔属性禁用用户输入的控件
span {
    position: relative;
}

span.disabled-detector {
    position: absolute;
    top: 0;
    bottom: 0;
    left: 0;
    right: 0;
    opacity: 0;
}

input+span.disabled-detector {
    display: none;
}

input[disabled]+span.disabled-detector {
    display: inline;
}