在我学习核心JavaScript的过程中,我现在正在学习EventListeners。
我的问题是,在下面的代码中没有在IE中触发EventListener(在Firefox和Chrome中工作正常)。
有人可以告诉我我做错了吗?
我的代码是:
<p>The first captain of the USS Enterprise NCC-1701 was
<a id="wikipedia" href="http://en.wikipedia.org">Christopher Pike</a>.
</p>
<script type="application/javascript">
var link = document.getElementById("wikipedia");
// for firefox and other browsers
if (typeof link.addEventListener != "undefined")
{
link.addEventListener("click", clickListener, false);
}
// IE only
else if (typeof link.attachEvent != "undefined")
{
link.attachEvent("onclick", clickListener);
}
function clickListener()
{
var link = document.getElementById("wikipedia");
link.setAttribute("href", "www.mysite.com/");
open("http://www.mysite.com");
return false;
}
</script>
答案 0 :(得分:3)
这真的是完整的代码吗?如果是,那么引用应该是'clickListener'而不是'wikipediaLink.clickListener'。
真正的问题是属性值“application / javascript”不是IE友好的,将其更改为“text / javascript”以及函数引用,你应该很好。
顺便说一句,我会使用一个抽象的addEvent函数 - 我特别修复了JScript中的'this'关键字问题,并且由于初始赋值,它不需要检查元素是否支持addEventListener方法因为它首先检查窗口对象:
var addEvent = (function() {
function addEventIE(el, ev, fn) {
return el.attachEvent('on' + ev, function(e) {
return fn.call(el, e);
});
}
function addEventW3C(el, ev, fn) {
return el.addEventListener(ev, fn, false);
}
return window.addEventListener ? addEventW3C:addEventIE;
})();
用法:
addEvent( link, 'click', clickListener );
答案 1 :(得分:0)
尝试使用此方法确定浏览器:
theFunction = function() { alert("Clicked!"); };
theElement = document.getElementById('wikipedia');
// All modern browsers
if (window.addEventListener) {
theElement.addEventListener('click', theFunction, false);
// IE
} else if (window.attachEvent) {
theElement.attachEvent('onclick', theFunction);
// Failure
} else {
alert("Your browser is definitely too old.");
}