2017-10-10 48 views
0

我现在有代码,这是否:变量不传递给函数

$('#BoxShadow_1').click(function() 
{ 
addDivBoxShadow('BoxShadow_1'); 
}); 

$('#BoxShadow_2').click(function() 
{ 
addDivBoxShadow('BoxShadow_2'); 
}); 

...等10个相似的元素。它工作得很好。

我也在使用JQuery。

我想更改代码以这样的事:

for (i = 1; i < 11; i++) { 

    $('#BoxShadow_' + i).click(function(){ 
     addDivBoxShadow("BoxShadow_" + i); 
    }); 

} 

挑战是这样的:

BoxShadow_10被分配给所有的div,而不是BoxShadow_1,BoxShadow_2等

FYI我试图实现的代码是我在这个URL写的数学游戏:

tinyurl.com/sashamath

在此先感谢。我希望在未来做出贡献。

好了,这里就是答案,使用'让我们声明如下:

for (let i = 1; i < 11; i++) { 

    $('#BoxShadow_' + i).click(function(){ 
     addDivBoxShadow("BoxShadow_" + i); 
    }); 

} 
+0

谢谢。关键是使用:'let'in:for(let i = 1; i <11; i ++) –

回答

2

的麻烦你的循环问题是经典的“在循环中的回调”。 '

然而,你根本不需要循环。只需使用thisid属性即可获取该ID。

function handler() { 
    addDivBoxShadow(this.id); 
} 

$('#BoxShadow_1').click(handler); 
$('#BoxShadow_2').click(handler); 

或者,如果你改变了addDivBoxShadow功能使用this来获取元素,你可以直接通过。

$('#BoxShadow_1').click(addDivBoxShadow); 
$('#BoxShadow_2').click(addDivBoxShadow); 

所以现在addDivBoxShadow可以使用this引用结合元件,并且它也将接收event对象作为参数。


当然,它也可以用一个选择器来完成。

$('#BoxShadow_1, #BoxShadow_2').click(addDivBoxShadow);