Javascript 如何在chrome和firefox中右键单击时禁用/启用复选框
我编写了一些代码,允许我在右键单击复选框时禁用/启用它们。它适用于IE,但不适用于Chrome或FirefoxJavascript 如何在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
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;
}