0

我在使用这个 js 代码时遇到了问题:

$('.downvoted').live('click',function(){
var ele = $(this);
var truc = ele.prev('.score_position');

$.post('ajax/vote.php', { vote :ele.attr('title') }, function(data) {
    if(data == 'done'){
        ele.removeClass('downvoted').addClass('downvote').html('<img src="images/down.png" />');
        truc.html(eval(truc.html()+1));
    }
});
return false;
});                 

所以我在另外 3 次有同样的功能来投票、取消投票和投票。它运行良好,但有一个例外,如果 truc.html() 为 -1,则它变为 -11 而不是 0。

知道为什么它不起作用吗?(你们可以在这里尝试:http: //91.121.154.130/ ?sort=last with id:azerty pw:azerty)

4

5 回答 5

6

不要eval()用于这种工作!在 Javascript 中使用parseInt,Number(...)或任何其他多种将值转换为数字的方法。

truc.html(parseInt(truc.html(), 10) + 1);

注意函数中的第二个参数parseInt。这意味着您希望将传入的值解析为以 10 为底的数字。如果您将一个以 0 开头的数字传入parseInt函数中而不指定基数,您将得到一个意外和不需要的结果。

或者

truc.html(Number(truc.html())+1);

甚至这样:

truc.html(truc.html()*1 + 1);

这是有效的,因为将字符串数字乘以一个结果会将变量转换为数字。小心——如果你乘的变量不是一个有效的数字,你会得到NaN

你不能简单地做的原因truc.html(truc.html()+1);是因为.html()返回一个字符串值。如果您在 Javascript 中将数字添加到字符串,则该数字会简单地连接到字符串,并且不会执行任何数学运算。(例如“-1”+“1”等于“-11”)。

于 2012-04-26T16:15:59.013 回答
4

首先尝试将值解析(从不使用eval)为整数:

truc.html( parseInt( truc.html(), 10 ) + 1 );

请记住,+它还在 JavaScript 中执行字符串连接。如果你有一个字符串,'1',你添加一个整数 1 到它,它会得到一个字符串 '11'。

首先将字符串解析为整数,然后执行数学运算,得到您预期的结果。

于 2012-04-26T16:15:41.750 回答
2

这个问题是因为 javascript 的连接器是加号+,如果解析为字符串 a+将导致字符串连接,而不是所需的加法。通过确保 JS使用如下函数将您解析truc.html()为 int 来修复它:parseInt()

truc.html( parseInt( truc.html(), 10 ) + 1 );

也不知道你为什么首先使用 eval,Elliot 已经触及了那里的问题。

于 2012-04-26T16:16:41.937 回答
1
truc.html(parseInt( truc.html(), 10 ) + 1);
于 2012-04-26T16:16:36.693 回答
0

您需要确保该值是整数,并且.text()在这种情况下 Use of 更好。

parseInt(truc.text(), 10)+1
于 2012-04-26T16:16:23.337 回答