我想一个方法添加到事件的原型。 为了调用/设置preventDefault()
,或者在IE-说话returnValue = false
和-if desired- 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打破在第一行,说“事件没有定义”。 离开了"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:我喜欢纯JavaScript,所以请,不建议jQuery的,prototypejs,道场,...作为一个解决方案。 我刚刚摆脱了的jQuery。 (我喜欢jQuery的,但没有必要为它在这种情况下)
更新
事情已经采取了逆转,我害怕。 我发现这个MSDN参考 。 整个页面涉及DOM元素的原型。 这是很公平地说,他们是选择和使用在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;
};