IE - 如果下拉框具有特定的类,则阻止焦点(单击、双击)。 请注意:此翻译中的HTML标签和引号内的内容未翻译。

20 浏览
0 Comments

IE - 如果下拉框具有特定的类,则阻止焦点(单击、双击)。 请注意:此翻译中的HTML标签和引号内的内容未翻译。

我正在使用JavaScript模拟一个禁用的选择元素。我无法真正禁用它,因为.NET验证器会失败,但这是另外一个故事。\n我有以下函数:\n

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

\n它在这里被调用:\n

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

\n在IE中双击选择框似乎仍然允许显示和选择项目。我尝试使用IE开发者工具栏,发现e.type显示为focus和dblclick。这是IE的一个bug,还是我需要捕捉其他事件?我也尝试了focusin。\n谢谢!

0
0 Comments

问题出现的原因是代码中遗漏了括号,导致无法正确执行preventDefault()函数。

解决方法是在代码中添加括号,将preventDefault()函数正确地调用。

以下是修正后的代码示例:

$('.my-select').on('click', function(e) {
   if ($(this).hasClass('specific-class')) {
      e.preventDefault();
   }
});

这样,在具有特定类名(specific-class)的选择框上点击时,将阻止默认的焦点行为。

0
0 Comments

在IE ≤ 8中,当一个select元素具有特定的class时,防止其获得焦点(点击、双击)的问题出现的原因是因为没有找到类似其他浏览器中在mousedown事件上调用e.preventDefault()的方法来阻止选择和阻止焦点。然而,通过设置unselectable属性可以解决这个问题。unselectable属性可以阻止选择和焦点的发生。与其他一些常见的解决方法(如setTimeout(function() { thingIDidntWantFocusStolenFrom.focus(); }))不同的是,unselectable属性可以在鼠标按下事件的目标元素上直接设置,从而避免了焦点被窃取的问题。

有趣的是,unselectable属性不会被继承,所以它经常被忽视,而选择使用selectstart事件(冒泡事件,调用e.preventDefault()可以阻止选择但无法阻止焦点),或者在每个后代元素上进行遍历设置(例如StackOverflow上的答案和Tim Down的一系列几乎相同的答案)。然而,实际上可以直接在mousedown事件的目标元素上设置unselectable属性。

此外,还有一个与jQuery相关的问题:http://bugs.jquery.com/ticket/10345

0