2013-06-27 5 views
2

У меня возникли проблемы с e.preventDefault() в IE8, как это вызывает следующее сообщение об ошибке:Rewriting e.preventDefault() для IE8

Object doesn't support property or method `preventDefault` 

Как видно из других потоков и на Google, это можно избежать, используя e.returnValue как резерв. В моей ситуации я использую плагин, который я не хочу изменять в каждой части, где это происходит. Я думал переписать функцию Event.preventDefault, обратившись к прототипу объекта, но я не уверен, как это сделать, и я не могу найти никакой информации об этом.

Это похоже на наиболее очевидное и изящное решение. Можно ли это сделать?

+0

Если вы знаете, как работает прототип объекта в целом - попробуйте его и расскажите, что произойдет. Если вы этого не сделаете - сначала исследуйте эту тему. – CBroe

+0

Я просто не знал правильного имени объекта, но ответ ниже очистил проблему;) Это сработало - очевидно – gbbr

ответ

3

Это то, что я обычно делаю:

if (!Event.prototype.preventDefault) 
    Event.prototype.preventDefault = function() { 
     try {this.keyCode = 0;} catch (e) {} 
     this.returnValue = false; 
    } 

Ну, это является наиболее очевидным решением. Я не могу точно помнить, когда, но иногда вам нужно установить свойство keyCode на 0, чтобы правильно предотвратить события клавиатуры.

Примечание: это работает только в IE8 , поскольку IE7 не имеет Event конструктор.

+0

Было бы хорошо проверить, существует ли 'preventDefault' первым, чтобы избежать перезаписи встроенной версии в браузерах которые поддерживают его. –

+0

@JakubWasilewski Ну, дух! : \ Хорошо, я редактирую ответ. – MaxArt

+0

Спасибо Макс, но я не понимаю, почему вы добавили часть keyCode ... – gbbr