在函数“clickListener”运行后,如何更新变量“clicked”的值?这绝对是“clicked”变量范围的问题。
var clicked = 'no';
focus();
listener = addEventListener('blur', clickListener);
function clickListener(){
if(document.activeElement == document.getElementById('someIframe')){
clicked = 'yes';
console.log(clicked);
}
};
每当我运行此命令时,控制台都会记录"is",但如果我在单击发生后检查变量,则单击的“外部”仍然是“否”。
<小时/>这是我的问题的 JSFiddle: https://jsfiddle.net/6c3nbpk5/4/
- 打开控制台
- 注意 DIV“消息”的状态(“未点击”)
- 点击 iframe 中显示“点击我”的位置
- 请注意,控制台显示“Div Message: Clicked”
- 注意函数内的变量应更新为由控制台单击确认
- Note Div“消息”仍然显示未点击。
我需要 divMessage 来更新为已点击。但是,所有这些都在跟踪多个 iframe 的函数内,因此我无法将变量附加到窗口。
最佳答案
JavaScript 是函数作用域的,如果它在当前函数作用域中没有找到定义,它将检查外部作用域等等。
您实际上是在内部函数中更改外部clicked
的值。
但是,这可能看起来有点棘手 - 请参阅此处了解时机 - https://jsfiddle.net/6c3nbpk5/1/ .
var clicked = 'no';
window.addEventListener('click', clickListener);
function clickListener(){
clicked = 'yes';
window.alert(clicked);
};
window.alert(clicked);
关于javascript - 从 addEventListener 中获取变量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37104436/