Прототип события JavaScript в IE8
Я пытаюсь добавить метод в прототип события. Для того, чтобы позвонить / установитьpreventDefault()
или, в IE-говоритьreturnValue = false
и, если желательно,stopPropagation()
/ cancelBubble = true;
, Я думал, что кода ниже было бы достаточно.
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 разрывается на первой строке, говоря'Event is undefined', Покидать"use strict";
не имеет значения вообще.
Я неохотно пробовал и это:
if (typeof Event === 'undefined')
{
var Event = window.Event || window.event;//FFS IE :-(
}
Но безрезультатноError: 'Event.prototype' is null or not an object
Итак, я получил 1 строку дальше. Дело в том, что весь метод-прототип является копией вставки из моего скрипта, но что я здесь упускаю? Есть идеи или предложения?
Спасибо
PS: I like Pure JavaScript, so please, don't suggest jQuery, prototypejs, dojo,... as a solution. I've just gotten rid of jQuery. (I like jQuery, but there is no need for it in this case)
Update
Боюсь, дела обернулись к худшему. я нашелэта ссылка MSDN, Вся страница посвящена прототипам DOM Element. Довольно справедливо сказать, что они доступны и применимы в IE8 (в некоторой степени). На этой странице этот код попался на глаза:
Event.prototype.stopPropagation = function ()
{
this.cancelBubble = true;
};
Event.prototype.preventDefault = function ()
{
this.returnValue = false;
};
Его можно найти примерно на 3/4 части страницы в разделе под названием"Powerful Scenarios"
, На мой взгляд, это то же самое, что я хочу сделать, но что еще: если я попробую этот код через 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;
};