Google chrome extension [Javascript]将本地变量作为参数传递给EnventListener单击
我需要将局部变量值传递给函数。Google chrome extension [Javascript]将本地变量作为参数传递给EnventListener单击,google-chrome-extension,Google Chrome Extension,我需要将局部变量值传递给函数。我的代码只能在局部变量未用作另一个函数的参数时发出警报。当我尝试传递该值时。 这是我的代码,来自文件“test.js”: function test() { var divs = document.getElementsByClassName('post'); for (var i = 0; i < divs.length; i++) { if (divs[i].id != null) { var el
我的代码只能在局部变量未用作另一个函数的参数时发出警报。
当我尝试传递该值时。
这是我的代码,来自文件“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);
}
}
}
如果我直接使用divs[I].id而不是currentId var,Chrome控制台将报告:未捕获的TypeError:无法读取未定义的属性“id”
(匿名函数)您可以在事件侦听器中动态获取id
element.addEventListener("click", function(e){
alert(e.target.parentNode.id);
}, false);
您可以在事件侦听器中动态获取id
element.addEventListener("click", function(e){
alert(e.target.parentNode.id);
}, false);
您可以在事件侦听器中动态获取id
element.addEventListener("click", function(e){
alert(e.target.parentNode.id);
}, false);
您可以在事件侦听器中动态获取id
element.addEventListener("click", function(e){
alert(e.target.parentNode.id);
}, false);
“循环中的闭包”问题(请参阅我对您原始帖子的评论)
试试这个
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);
}
}
功能测试()
{
var divs=document.getElementsByClassName('post');
对于(变量i=0;i
试试这个
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);
}
}
功能测试()
{
var divs=document.getElementsByClassName('post');
对于(变量i=0;i
试试这个
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);
}
}
功能测试()
{
var divs=document.getElementsByClassName('post');
对于(变量i=0;i
试试这个
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);
}
}
功能测试()
{
var divs=document.getElementsByClassName('post');
对于(变量i=0;i //警报(currentId);这是“循环中的闭包”问题。在执行click处理程序时,创建处理程序的循环已经结束,因此“currentId”的值是上一个循环周期的值(显然是“null”)而不是事件处理程序创建时间的值。解决方案:1.内部闭包,2.函数工厂…两者都将在绑定事件处理程序时关闭currentId的当前值这是“循环中的闭包”问题。在执行click处理程序时,创建处理程序的循环已经结束,因此“currentId”的值是上一个循环周期的值(显然是“null”)而不是事件处理程序创建时间的值。解决方案:1.内部闭包,2.函数工厂…两者都将在绑定事件处理程序时关闭currentId的当前值这是“循环中的闭包”问题。在执行click处理程序时,创建处理程序的循环已经结束,因此“currentId”的值是上一个循环周期的值(显然是“null”)而不是事件处理程序创建时间的值。解决方案:1.内部闭包,2.函数工厂…两者都将在绑定事件处理程序时关闭currentId的当前值这是“循环中的闭包”问题。在执行click处理程序时,创建处理程序的循环已经结束,因此“currentId”的值是上一个循环周期的值(显然是“null”)而不是事件处理程序创建时间的值。解决方案:1.内部闭包,2.函数工厂…都将在绑定事件处理程序时关闭currentId的当前值我认为OP的代码显示单击的元素
没有类postdiv
的idde>我认为OP的代码显示点击的元素
没有原始div
的id,classpost
我认为OP的代码显示点击的元素
没有原始div
的id,classpost
我认为OP的代码显示点击的e> 元素
没有类为post的原始div
的id