使用CSS禁用onclick ::可能吗?

时间:2012-07-12 12:07:07

标签: javascript html css

我想用CSS禁用onclick事件。可能的?

假设我有

<div id="btnCopy" class="button" onclick="btnCopy(this);"><img src="copy.png"></div>

并添加班级“禁用”

document.getElementById("btnCopy").className += " disabled";

我想关闭此元素的onclick事件,因此onclick="btnCopy(this);"不会处于活动状态。

删除“禁用”

document.getElementById("btnCopy").className = 
  document.getElementById("btnCopy").className.replace(/(?:^|\s)disabled(?!\S)/, '');

它将恢复正常,因此onclick事件将处于活动状态。

10 个答案:

答案 0 :(得分:26)

在某些浏览器中,您可以设置pointer-events: none,但这会禁用所有鼠标事件,而不仅仅是点击。请参阅:https://developer.mozilla.org/en/CSS/pointer-events/

答案 1 :(得分:24)

你可以这样做。

pointer-events: none;
cursor: default;

更多here

答案 2 :(得分:11)

btnCopy函数添加一些Javascript,以检查参数元素是否具有disabled类。

使用CSS来改变JavaScript的行为是不可能的。 CSS用于样式化HTML元素,JavaScript用于处理事件和站点的行为。 CSS和JavaScript是两个非常不同的东西。 CSS唯一可能的做法是阻止用户点击输入(例如按钮)。使用CSS解决方案,您不会禁用onclick事件中的代码。您只是禁用用户触发onclick事件的能力。

但是,有很多方法可以改变页面上的内容(使用更多的JavaScript或浏览器的某些插件),这样可以在尽管使用CSS伪元素的情况下点击按钮。这就是为什么不建议使用CSS 的原因。

答案 3 :(得分:5)

这是hackish,但我建议使用伪元素:

在具有禁用类的按钮上,您可以创建一个覆盖按钮的伪元素,使其无法点击。

但是使用javascript更有意义,因为你已经使用它来添加和删除类...

编辑:根本不推荐,但是你去了:

#btnCopy {position:relative;z-index:1;}

.disabled:before {
  content:" ";
  display:block;
  position:absolute;
  top:0;left:0;right:0;bottom:0;
  z-index:10;
}

答案 4 :(得分:2)

如果您使用javascript添加和删除类,那么为什么不使用它来启用禁用点击事件?

答案 5 :(得分:1)

Bootstrap就是这样做的。

.btn.disabled, .btn[disabled] {
    cursor: not-allowed;
    opacity: 0.65;
    filter: alpha(opacity=65);
    box-shadow: none;
}

您可以保留cursor: not-allowed;,如果您不需要重置样式,则将其删除opacity: 0.65; filter: alpha(opacity=65); box-shadow: none;

答案 6 :(得分:0)

如果你想添加或删除“禁用”类,你也可以在事件处理程序中检查这个类,而不要做任何事情,因为元素已经禁用了类。

答案 7 :(得分:0)

您可以使用javascript通过添加此行javascript来禁用按钮onclick事件。

var btnCopy = document.getElementById("btnCopy");
btnCopy.className += " disabled";
btnCopy.onclick = null;

最好的选择可能是使用jQuery并检查btnCopy是否具有“禁用”类。

if(!$('btnCopy').hasClass('disabled')){
   //Add code to copy text here
}
祝你好运!

答案 8 :(得分:-2)

<div id="btnCopy" class="button" 
    onClick="if(this.className.indexOf('disabled') == -1){btnCopy(this);}">
    <img src="copy.png">
</div>

必须使用Javascript完成。 if(indexOf('disabled') == -1)可以做到这一点。

答案 9 :(得分:-3)

纯粹通过CSS执行此操作的一种方法是在悬停时显示不可忽略的隐形叠加。

演示:http://jsfiddle.net/FNVmh/1/