IE - предотвратить фокусировку (щелчок, двойной щелчок) на поле выбора, если оно имеет определенный класс - PullRequest
4 голосов
/ 10 февраля 2010

Я использую JavaScript для имитации отключенного элемента select. Я не могу отключить его, так как валидаторы .net не работают, но это другая история.

У меня есть следующая функция:

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

Это называется здесь:

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

Двойной щелчок на поле выбора в IE по-прежнему позволяет отображать и выбирать элементы. Я попробовал панель инструментов разработчика IE, и e.type показывается как focus и dblclick. Это ошибка IE или мне нужно перехватить какое-то другое событие? Я также попробовал focusin.

Спасибо!

Ответы [ 2 ]

1 голос
/ 01 мая 2014

Это на 4 года позже, но я только что обнаружил, что на самом деле есть способ заставить IE ≤ 8 делать то, что e.preventDefault() на mousedown делает в других браузерах (что предотвращает выбор , а предотвращает фокусировку ): установите атрибут unselectable! http://jsbin.com/yagekiji/1

Обратите внимание, что в отличие от всегда предлагаемых обходных путей, которые всегда сводятся к setTimeout(function() { thingIDidntWantFocusStolenFrom.focus(); }), это предотвращает кражу фокуса с помощью цели mousedown, во-первых!

Что забавно в unselectable, так это то, что он не наследуется, поэтому его часто упускают из виду в пользу события selectstart (которое всплывает, и e.preventDefault(), которое предотвращает выбор, но не предотвращение фокуса) или установите для каждого элемента-потомка обход дерева (например, ответ StackOverflow, который первым подсказал мне, что это возможно , или ряд Тима Дауна из почти идентично ответов ), но вы можете просто установить его на event.target на mousedown.

(Также, jQuery билет: http://bugs.jquery.com/ticket/10345)

0 голосов
/ 10 февраля 2010

Я не знаю, является ли это опечаткой, но вы должны использовать e.preventDefault (); похоже, вы пропустили скобку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...