【问题标题】:Is it possible to disable onclick without altering its function?是否可以在不改变其功能的情况下禁用 onclick?
【发布时间】:2018-06-19 12:56:05
【问题描述】:

我知道在元素上禁用onclick 事件的方法是:

element.onclick = null;

启用:

element.onclick = function(){
   // something
};

element.addEventListener("click", me);

这很好,但是当你有几个元素时——每个元素都有相同的函数和不同的参数值——使用这种方式会变得有点烦人。有没有一种方法可以在不牺牲初始函数及其参数的情况下禁用它?

我想保持功能原样,而不必将其设置为 null 或其他内容以禁用。

【问题讨论】:

  • 看看观察者模式Book
  • 有点不清楚你想要实现什么。你是否想要覆盖全局方法?
  • 不,我只想禁用 onclick,但保留功能,而不必将功能设置为 null
  • 不能在别处定义函数吗?
  • 声明一个函数,然后将其设置为元素的onclick函数,并不比在onlick赋值中声明函数更耗时

标签: javascript onclick dom-events


【解决方案1】:

使用disabled 属性禁用按钮。

<button onclick="alert('clicked')">Enabled</button>
<button onclick="alert('clicked')" disabled>Disabled</button>

这种方法的优点(相对于替代答案中建议的“指针事件”)是它不仅会阻止您作为鼠标用户使用按钮,还会阻止辅助技术和任何使用键盘的人。

在 JavaScript 中,您可以通过以下方式禁用或启用该属性:

el.disabled = true;   // Disable.
el.disabled = false;  // Enable.

或者使用 jQuery 你可以这样做:

$('button').prop('disabled', true);   // Disable.
$('button').prop('disabled', false);  // Enable.

【讨论】:

  • 它的好方法,但我也需要停止键盘,否则我不能使用它,但感谢我投票赞成的答案
  • @luke 我认为他是说这种方法将禁用键盘用户,而其他答案(带有指针事件)则不会
  • @DonCruickshank:由于我也误解了答案,因此我对其进行了编辑以使其更清楚。如果您不同意,请随时回复或改进。
  • @Heinzi 是的,我知道这更有意义。谢谢!
【解决方案2】:

你可以在css中做到这一点。

<button onclick="alert('clicked')">Can click</button>
<button onclick="alert('clicked')" style="pointer-events: none;">Cannot click</button>

专业版:它适用于所有 HTML 元素

缺点:它不会阻止键盘操作

【讨论】:

  • 这将阻止某人使用鼠标单击按钮,但不会阻止键盘用户使用它。
【解决方案3】:

你可以这样做

<button onclick="false && alert('clicked')">Try Click (Disabled)</button> 

<button onclick="true && alert('clicked')">Try Click (Enabled)</button>

它适用于点击事件和按键事件。

<button onclick="false && alert('clicked')">Try Click (Disabled)</button>

<button onclick="true && alert('clicked')">Try Click (Enabled)</button>

【讨论】:

  • @luke 它将停止键和单击事件调用该函数,而无需对脚本进行任何更改。
猜你喜欢
  • 2019-02-12
  • 1970-01-01
  • 2020-01-02
  • 1970-01-01
  • 2012-07-22
  • 1970-01-01
  • 2015-10-30
  • 1970-01-01
  • 2021-10-11
相关资源
最近更新 更多