[Javascript]将本地变量作为参数传递给EnventListener单击

时间:2014-04-23 23:53:30

标签: google-chrome-extension

我需要将一个局部变量值传递给一个函数。

我的代码只能在它没有被用作另一个函数的参数时警告本地var。
当我尝试传递价值。

这是我的代码,它来自'test.js'文件:

function test() 
{
    var divs = document.getElementsByClassName('post');
    for (var i = 0; i < divs.length; i++) {
        if (divs[i].id != null) {
            var element = document.createElement("div");
            var currentId = divs[i].id;

            element.className = 'myclass';

           //alert(currentId); <-- Correct value

            element.addEventListener("click", function(){
                alert(currentId);// <-- Value == null ?!
            }, false);

            divs[i].appendChild(element);
        }
    }
}

此代码来自清单:

"content_scripts": [
        {
          ...
          "js": ["test.js"]
        }

如果我直接使用divs [i] .id,而不是currentId var,Chrome控制台会报告:

未捕获的TypeError:无法读取未定义的属性“id” (匿名函数)

2 个答案:

答案 0 :(得分:2)

&#34;关闭循环内部&#34;问题(见我对原帖的评论)

试试这个

function test() 
{
    var divs = document.getElementsByClassName('post');
    for (var i = 0; i < divs.length; i++) {
        if (divs[i].id != null) {
            var element = document.createElement("div");
            var currentId = divs[i].id;

            element.className = 'myclass';

            //alert(currentId); <-- Correct value

            element.addEventListener("click", functionFactory(currentId), false);

            divs[i].appendChild(element);
        }
    }
}

function functionFactory(_localId) {
   return function(){
      alert(_localId);
   }
}

答案 1 :(得分:1)

您可以在事件侦听器中动态获取id。

element.addEventListener("click", function(e){
    alert(e.target.parentNode.id);
}, false);