出于某种目的,我想将 Window.Event 对象缓存在变量中并稍后使用它,但 MSIE 一直告诉我这是“未知”。
只需在 IE 中运行下面的代码,您就会明白我的意思
我只是想问一下,怎么会出现这种情况? 我错过了什么?
html:
<button id='btn'>Click!!!</button>
JS:
var eventObj = null;
document.getElementById('btn').onclick = function() {
eventObj = window.event;
setTimeout(function() {
alert(typeof eventObj.srcElement);
}, 1000)
}
EIDT 1:
我搜索了其他人所做的一些测试,请参阅以下内容:
HTML:
<button id='btn1'>Click 1 !!</button>
<button id="btn2">Click 2 !!</button>
JS
var btn1EventObj = null;
document.getElementById('btn1').onclick = function() {
btn1EventObj = window.event;
alert(btn1EventObj.srcElement.id);
}
document.getElementById('btn2').onclick = function() {
alert(btn1EventObj === window.event); // output:false;
alert(btn1EventObj.srcElement === window.event.srcElement); // output: true ;
alert(btn1EventObj.srcElement.id); // output: btn2 ;
}
当单击btn1时,我假设我将“事件对象”缓存在btn1EventObj中,然后单击btn2:
测试:
btn1EventObj === window.event -> false;//MSIE 中不止一个事件对象
btn1EventObj.srcElement === window.event.srcElement -> true//我无法理解下面这个。
btn1EventObj.srcElement.id ->btn2
参见 fiddle
所以以上所有内容告诉我,也许MSIE中引发的所有事件都是共享属性,并且当单击btn2时,所有先前的属性都被后面的属性覆盖?
我说得对吗?
最佳答案
您无法在 IE 中将 window.event
复制到实际事件的上下文之外。换句话说:当您在脚本中分配处理程序时,不存在任何现有事件。如果您想引用 window.event
,则必须内联分配处理程序。
MSDN:
The event object is available only during an event—that is,
you can use it in event handlers but not in other code.
HTML:
<button id='btn' onclick="clicker(event);">Click!!!</button>
和JS:
function clicker(e){
setTimeout(function (){
alert(e.srcElement);
},1000);
return;
}
event
在 MSDN 中。
关于javascript - MSIE 如何发出警报 'unknow'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11482691/