我有跨浏览器addEventListener代码,我需要传递事件对象 这适用于Chrome,但不适用。 那我该怎么办?
function addEvent(element, eventName, eventFunction) {
if(element.attachEvent) //Internet Explorer
element.attachEvent("on" + eventName, function (e) {eventFunction.call(element);});
else if(element.addEventListener) //Firefox & company
element.addEventListener(eventName, function (e) { eventFunction(e) }, false);
}
addEvent(window, 'keydown', changeSpeed);
答案 0 :(得分:0)
在较旧的IE上,事件对象不作为参数传递,它是一个名为event
的全局变量。所以最小的mod是:
function addEvent(element, eventName, eventFunction) {
if(element.attachEvent) //Internet Explorer
element.attachEvent("on" + eventName, function () {eventFunction.call(element, event);});
// No argument ------------------------------------^ use global -------------------^
else if(element.addEventListener) //Firefox & company
element.addEventListener(eventName, function (e) { eventFunction(e) }, false);
}
但有几点注意事项:
我会首先检查addEventListener
,因为有些浏览器可能会提供attachEvent
作为后台来处理旧的特定于IE的代码。
attachEvent
和addEventListener
的行为之间存在其他一些差异,特别是在防止事件的默认行为和停止事件传播方面。这个addEvent
函数根本不解决这些问题。
您未在this
版本中正确设置addEventListener
。
我没有重新发明这种轮子,而是去购买现有的经过公路测试的轮子并使用它。
答案 1 :(得分:0)
将事件对象直接传递给调用函数
更容易function addEvent(element, eventName, eventFunction) {
if(element.attachEvent) //Internet Explorer
element.attachEvent("on" + eventName, eventFunction);
else if(element.addEventListener) //Firefox & company
element.addEventListener(eventName, eventFunction, false);
else //old browser
element["on" + eventName] = eventFunction;
}
确定IE9,Firefox&共强>
<input type="text" id="test">
<script>
addEvent(document.getElementById('test'),'keypress',function(e){
keyCode =(window.event)?window.event.keyCode:e.which;
alert(keyCode);});
</script>