2016-08-30 66 views
0

我有一组计数器,我想在单击图像时增加。当图像被点击时,我得到图像的值attr。然后我可以在名称和全部的div中显示适当的图像,并且我想增加它的响应计数器。这里是代码:连接字符串加html元素的数值以增加变量

var counter1 = 0; 
var counter2 = 0; 
var counter3 = 0; 
var counter4 = 0; 

$('body').click(function(e) { 

    var target = $(e.target); // Which cat was clicked 
    value = target.attr("value"); 
    counter = "counter"+ value; 
    console.log(counter); 
    counter++; 
    console.log(counter); 
    $("img").attr({src:"./images/cat" + value +".png"}); 
    $("h5").html("Cat " + value); 
    $("p").html(counter); 
}); 

我遇到的问题是,例如该计数器= C1的,但是当我做了柜台++我得到NaN的。如果我只是使用:

counter1++; // or any other counter 

它增加了全局计数器变量罚款。

我在做什么错?

+0

“计数器”初始化在哪里? – depperm

+0

它被设置为全局变量 –

回答

3

你为什么不做这样的事情!

//store in array 
var counter[1]=0,counter[2]=0,counter[3]=0,counter[4]=0; 

//increment the value 
counter[value]++; 
0

您的变量counter包含字符串"counter1",它是非数字(NaN)

像您可以在php不能在javascript使用可变变量...

为了达到你所需要的,请使用下列内容:

eval(counter + '++;'); 

这是计算结果为字符串"counter1++;"和执行为javascript代码。

+0

我不推荐使用'eval()'。 'eval()'是邪恶的:) :) – bipen

+1

这取决于如何使用它=)但是...在某些情况下它可能用于XSS – spirit

+0

但至少它工作=)) – spirit

0

NaN的意思是“不是数字”,所以你不能在Javascript中添加字符串。 。你为什么不增加价值,并在稍后进行连续计数。

..... 
counter = value; 
console.log("counter: " + counter); 
counter++; 
console.log("counter: " + counter); 
... 
$("p").html("counter"+value); 
... 

我可以看到你正在使用counter只有1处(html())所以只是CONCAT计数器和价值+末。

1
counter = "counter"+ value; 
counter++; 

这是你在做什么错。在第一行中,您将字符串“counter”附加一个数字(例如3),因此结果也是一个字符串(例如“counter3”)。 现在在第2行中,您正在尝试增加它。 这显然不会工作,因为一个字符串不会增加。

你应该做一些像@Ish提到的一样。类似这样的:

//store in array 
var counter[1]=0,counter[2]=0,counter[3]=0,counter[4]=0; 

$('body').click(function(e) { 

    var target = $(e.target); // Which cat was clicked 
    value = target.attr("value"); 
; 
    //increment the value 
    counter[parseInt(value)]++; 

    $("img").attr({src:"./images/cat" + value +".png"}); 
    $("h5").html("Cat " + value); 
    $("p").html("counter"+ value); 
});