从addEventListener中获取变量值

时间:2016-05-08 20:21:38

标签: javascript click addeventlistener

如何更新变量的值"点击"在函数" clickListener"运行?对于"点击"它肯定是一个问题。变量的范围。

var clicked = 'no';
focus();
listener = addEventListener('blur', clickListener);
function clickListener(){
    if(document.activeElement == document.getElementById('someIframe')){
        clicked = 'yes';
        console.log(clicked);
    }
};

每当我运行它时,控制台记录"是"但是" outter"如果我在点击发生后检查变量,则单击仍然没有。

这是我的问题的JSFiddle: https://jsfiddle.net/6c3nbpk5/4/

  1. 打开控制台
  2. 注意DIV状态"消息" ('未点击')
  3. 点击iframe,其中显示"点击我"
  4. 请注意,控制台会显示“Div消息:点击
  5. 注意功能中的变量应更新为通过控制台确认点击
  6. 注意Div" message"仍然显示未点击。
  7. 我需要将divMessage更新为点击。但是,所有这些都在跟踪多个iframe的函数内,因此我无法将变量附加到窗口。

2 个答案:

答案 0 :(得分:1)

JavaScript是函数作用域,如果它在当前函数作用域中没有找到定义,它将检查外部作用域等等。

您实际上正在更改内部函数中外部clicked的值。

然而,这似乎有点棘手 - 请参阅此处以了解时间 - https://jsfiddle.net/6c3nbpk5/1/

var clicked = 'no';
window.addEventListener('click', clickListener);
function clickListener(){
        clicked = 'yes';
        window.alert(clicked);
};
window.alert(clicked);

答案 1 :(得分:0)

addEventListener是必须从事件目标调用的函数。你不应该把它等同于任何东西。

例如,让我们假设你有一个div想要存储一个确定它是否被点击的变量:

var div = document.querySelector('div'); // grabs the first div
var clicked = false;

div.addEventListener('click', function() {
  clicked = true;
});

注意:您的代码目前正在做的是在window上注册事件监听器,因为您没有指定目标,javascript假设您的意思是window

因此,页面上的任何模糊事件都会触发您的回调。如果这是预期的行为,请发布您的完整html,并更详细地说明您要实现的目标,我们可以帮助调试该问题。

在我看来,你应该使用点击事件而不是模糊事件,因为它只是在丛林中跳动以获得相同的结果。