[英]Am I guaranteed to get an event object with a target property in a JavaScript event handler?
就像标题说的那样,我很好奇是否可以保证在Javscript事件处理程序中获取事件对象。 我要问的主要原因是我看到了如下所示的onClick事件处理程序。
function(e) {
if(e && e.target) {
//Code in here
}
}
这对我来说似乎是错误的,但是我知道Javascript在各个浏览器之间可能会有微小的差异。 是否有适当的时间检查事件对象? 还是事件目标? 看来您必须有一个触发事件的目标。
否。较早版本的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));
});
}
}
根据他们希望实现的浏览器兼容性,这可能是一个可接受的解决方案。 但是 ,对于较旧版本的IE, event
对象是全局window
对象的一部分。 在这种情况下,为了获得目标,您将需要window.event.srcElement
,因为没有target
。
有关IE event
对象的更多信息,请参见此处。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.