Я пытаюсь добавить метод к прототипу Event. Чтобы вызвать/установить preventDefault()
или, на языке IE returnValue = false
и, при желании, stopPropagation()
/ cancelBubble = верно;
. Я думал, что приведенного ниже кода будет достаточно.
Event = Event || window.Event;
//^^ makes the fiddle work on IE8 ^^
if(!(Event.prototype.stopEvent))
{
Event.prototype.stopEvent = function(propagate)
{
"use strict";
propagate = (propagate ? true : false);
if (this.preventDefault)
{
this.preventDefault();
if (propagate === false)
{
this.stopPropagation();
}
}
else
{
this.returnValue = false;
this.cancelBubble = !propagate;
}
return this;
};
}
Кажется, это работает, как вы можете видеть здесь.Эта скрипта показывает OK
в IE8, Firefox и Chrome. Хотя, когда я добавляю это в свой скрипт, IE8 прерывается на первой строке, говоря 'Событие не определено'. Отсутствие "use strict";
не имеет никакого значения.
С неохотой я попробовал и это:
if (typeof Event === 'undefined')
{
var Event = window.Event || window.event;//FFS IE :-(
}
Но безрезультатно: Ошибка: 'Event.prototype' is null or not a object
, поэтому я продвинулся на 1 строку дальше. Дело в том, что весь метод прототипа — это копипаста из моего скрипта, но что я здесь упускаю из виду? Есть идеи/предложения?
Спасибо
PS: Мне нравится Pure JavaScript, поэтому, пожалуйста, не предлагайте jQuery, прототипы, додзё,... в качестве решения. Я только что избавился от jQuery. (Мне нравится jQuery, но в данном случае он не нужен)
Обновление
Боюсь, дела пошли хуже. Я нашел эту ссылку MSDN . Вся страница посвящена прототипам элементов DOM. Будет справедливо сказать, что они доступны и могут использоваться в IE8 (в некоторой степени). На этой странице мне бросился в глаза следующий код:
Event.prototype.stopPropagation = function ()
{
this.cancelBubble = true;
};
Event.prototype.preventDefault = function ()
{
this.returnValue = false;
};
Его можно найти примерно на 3/4 страницы вниз, в разделе под названием «Мощные сценарии»
. На мой взгляд, это то же самое, что я хочу сделать, но более того: если я попробую этот код через jsfiddle, он даже не сработает, тогда как мой jsfiddle (с моим кодом) работал в IE8. Это только последние несколько строк фрагмента, но, насколько я понимаю, эти несколько строк кода должны работать нормально. Я изменил их следующим образом:
Event.prototype.stopPropagation = function ()
{
if (this.stopPropagation)
{
return this.stopPropagation();
}
this.cancelBubble = true;
};
Event.prototype.preventDefault = function ()
{
if (this.preventDefault)
{
return this.preventDefault();
}
this.returnValue = false;
};