IE - 如果选择框具有特定类,则阻止焦点(单击,双击)

Posted

技术标签:

【中文标题】IE - 如果选择框具有特定类,则阻止焦点(单击,双击)【英文标题】:IE - Prevent focus (click, doubleclick) on a select box if it has a specific class 【发布时间】:2011-01-15 09:53:56 【问题描述】:

我正在使用 javascript 来模拟禁用的选择元素。由于 .net 验证器失败,我实际上无法禁用它,但这是另一回事。

我有以下功能:

function preventFocus(e) 
  if ($(this).hasClass("disabled")) 
    e.preventDefault();
    this.blur();
  

这里叫:

$("#ProvinceID").toggleClass("disabled").bind('focus click dblclick', preventFocus);

在 IE 中双击选择框似乎仍然允许显示和选择项目。我尝试了 IE 开发工具栏,e.type 显示为焦点和 dblclick。这是一个 IE 错误,还是我需要捕捉其他事件?我也试过专注。

谢谢!

【问题讨论】:

【参考方案1】:

这已经晚了 4 年,但我刚刚发现实际上有一种方法可以让 IE ≤ 8 来做 e.preventDefault() on mousedown 在其他浏览器中所做的事情(这会阻止选择 并且 阻止焦点):设置unselectable 属性! http://jsbin.com/yagekiji/1

请注意,与始终建议的变通办法(始终归结为setTimeout(function() thingIDidntWantFocusStolenFrom.focus(); ))不同,这首先可以防止焦点被mousedown 目标窃取!

unselectable 的有趣之处在于它不是继承的,因此它经常被忽略以支持 selectstart 事件(它会冒泡,e.preventDefault() 会阻止选择,但不会 防止焦点),或使用树遍历设置每个后代元素(如 the *** answer that first clued me in that this might be possible,或 Tim Down 的 series of nearly identical answers),但实际上您可以设置它在event.targetmousedown

(另外,jQuery 票证:http://bugs.jquery.com/ticket/10345)

【讨论】:

【参考方案2】:

我不知道这是否只是一个错字,但你应该使用 e.preventDefault();看起来你缺少括号。

【讨论】:

错字,是的;回答,没有。不过还是谢谢。

以上是关于IE - 如果选择框具有特定类,则阻止焦点(单击,双击)的主要内容,如果未能解决你的问题,请参考以下文章

IE9怎么设置阻止弹出窗口

在 IE11 中,当单击其子元素之一时,焦点事件未在具有显示 flex 的可聚焦父 HTML 元素上触发

检测特定文本框是不是有焦点[重复]

TextBox Binding TwoWay 直到焦点丢失 WP7 才会更新

仅在键盘选项卡后获取焦点元素

IE8怎么把已经允许弹出的窗口重新阻止该窗口弹出呢?