正如标题所说,如果我保证在Javscript事件处理程序中获取事件对象,我很好奇。我问的主要原因是我看到过看起来像这样的onClick事件处理程序。
function(e) {
if(e && e.target) {
//Code in here
}
}
对我来说这似乎不对,但我知道Javascript在浏览器中可能会有微小的差异。是否有时间检查事件对象是否合适?还是活动目标?看起来你必须有一个触发事件的目标。
答案 0 :(得分:3)
没有。较旧版本的Windows不会将事件参数传递给事件处理程序。他们将其放在全局变量window.event
中,目标位于.srcElement
。除了那个例外,你应该总是得到一个事件结构。
旧版IE的解决方法是:
function(e) {
if (!e) {
e = window.event;
e.target = e.srcElement;
}
// code that uses e here
}
但是,通常,这是通过用于安装事件处理程序的函数在更高级别解决的。例如:
// add event cross browser
function addEvent(elem, event, fn) {
if (elem.addEventListener) {
elem.addEventListener(event, fn, false);
} else {
elem.attachEvent("on" + event, function() {
// set the this pointer same as addEventListener when fn is called
window.event.target = window.event.srcElement;
return(fn.call(elem, window.event));
});
}
}
答案 1 :(得分:1)
根据他们希望实现的浏览器兼容性,这可能是一个可接受的解决方案。 但是,对于旧版本的IE,event
对象是全局window
对象的一部分。为了在这种情况下获得目标,您需要window.event.srcElement
,因为没有target
。
此处有关IE的event
对象的更多信息。