【问题标题】:How do I disable ondblclick in IE8?如何在 IE8 中禁用 ondblclick?
【发布时间】:2017-05-30 14:01:44
【问题描述】:

所以,我已经尝试过选择的答案:

How to disable ondblclick in JavaScript?

但它不起作用,就我而言。按照惯例,我怀疑它与 IE8 有关(因为我之前的很多问题都与 IE8 问题有关)。

这是我的按钮的样子,keyBtnEvent是一个改变div类的函数:

function keyBtnEvent(key, id, event) {
  //change class of object with id = 'id'
  console.log(event + 'event of keyBtnEvent called');
}
<div id="2Key" class="key"
  onmouseup="keyBtnEvent('2','2Key','up')"
  onmousedown="keyBtnEvent('2','2Key','down')">
  <button>2</button>
</div>

那么,如何在不使用 jquery 的情况下在 IE8 中禁用 ondblclick?

【问题讨论】:

  • edit您的问题显示keyBtnEvent()功能。根据您显示的代码,它应该(可能)是onmouseXYZ="return keyBtnEvent(...)"(也就是说,从函数返回值,假设它在您想取消事件时返回false)。
  • 你是说我应该加一个ondblclick="return keyBtnEvent('2', '2key', 'dblclick')"??
  • 哦,抱歉,我没有注意到您现有的活动不包括ondblclick。只需添加 ondblclick="return false" 属性即可。 (不是我通常推荐内联事件属性,而是因为您已经将它们用于其他事件。)
  • 你能清楚地说明你在这里的期望吗?即使禁用了双击,单击仍然会发生。

标签: javascript html css internet-explorer-8


【解决方案1】:

这是正确的 IE 8 方法:

var key = document.getElementById('2Key')

// Feature detection for DOM Event Standard and IE 8 and less
if(window.addEventListener){
  // W3C DOM Event Standard
  key.addEventListener("dblclick", function(evt) { 
    evt.preventDefault();    // stop the event
    evt.stopPropagation();  // don't bubble the event
  });
} else if(window.attachEvent){
  // IE 8 or less
  key.attachEvent("ondblclick", function(evt) { 
    evt = evt || window.event;
    evt.returnValue = false;  // stop the event
    evt.cancelBubble = true;  // don't bubble the event
  });
}

此外,您不应使用内联 HTML 事件属性(onmouseoveronmouseout 等)。 Here's why. 相反,您应该在专用脚本中完成所有 JavaScript 工作,并使用 .addEventListener()(或上述适用于 IE 8 或更低版本的 attachEvent() 方法)。

【讨论】:

  • 这对我不起作用...我知道 dblclick 仍然没有被禁用,因为按钮类在 dblclick 上没有改变(当它应该改变时 - 即 mousedown 改变了按钮类,但是仅在第一次点击时这样做)
  • 我在您编辑之前发表了评论。所以嗯...是的,让我先尝试一下。
  • 当您说 按钮类不会在 dblclick 上更改时,我不确定您的意思——这就是重点——禁用双击事件。这是一个带有模拟keyBtnEvent 函数的工作小提琴。 jsfiddle.net/11Ln4ago/9
  • @RobG IE 8 不支持.addEventListener()。直到 IE 9 才添加它。而且,虽然针对被调用的对象进行测试当然不是一个坏主意,但使用 .addEventListener() 没关系,因为它是全面实现的,而不是逐个对象。查看底部的兼容性:developer.mozilla.org/en-US/docs/Web/API/EventTarget/…
  • 你去,加载了错误的版本。 ;-) 但我也认为 addEventListener 在 IE 8 中得到支持,我猜确认偏差应该信任 MDN。无论如何,这不是 OP 的问题。
猜你喜欢
  • 2011-05-19
  • 1970-01-01
  • 2013-10-21
  • 2013-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-05
  • 2014-09-07
相关资源
最近更新 更多