首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带参数的javascript事件监听器

带参数的javascript事件监听器
EN

Stack Overflow用户
提问于 2013-04-15 00:59:31
回答 1查看 274关注 0票数 0

我有一个简单的事件监听器:

代码语言:javascript
运行
复制
function listen(evnt, elem, func) {
    if (elem.addEventListener)  // W3C DOM
        elem.addEventListener(evnt,func,false);
    else if (elem.attachEvent) { // IE DOM
         var r = elem.attachEvent("on"+evnt, func);
    return r;
    }
    return false;
}

我想用一个参数来设置监听器。(该参数不是由事件设置的,它是特定监听器的一部分。

我所做的和看起来很管用的是:

代码语言:javascript
运行
复制
function setlistener (param){

 listen ('custom event', document,
  function (e){
     run_func_with_param(param);
    }
  );
}

但我不明白它是否正确,因为param不应该在事件被触发时定义。

我的问题是-每次都使用setlistener中为其设置的参数调用run_func_with_param,这是正确的方式吗?换句话说,当run_func_with_param作为事件的结果被调用时,是否会记住参数并将其设置为正确的值?(对于同一事件,将有多个具有不同参数的侦听器)。

注意:请不要使用jQuery/其他库。在本例中,我使用了一个自定义事件。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-15 01:01:51

使用匿名函数时,来自父作用域的参数和局部变量在匿名函数中仍然可用。

因此,在传递给listen()的匿名函数中可以使用名为param的参数。它不会被传递给该函数--它只是直接从父作用域获得。

这是你的函数,在注释中有一些注释:

代码语言:javascript
运行
复制
function setlistener (param){
    // param is available here as an argument to setlistener
    // as a normal function argument
    listen ('custom event', document, function (e) {
        // param is still available here directly from the parent scope
        //     in this anonymous function.
        // This is one advantage of using anonymous functions.
        if (e.data.back_button==false){
          run_func_with_param(param);
        }
    });
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16001698

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档