带-1的eval加法不起作用

时间:2012-04-26 16:14:18

标签: jquery eval

我遇到了这个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次同样的功能,用于downvoting,un-upvoting和upvoting。它运行良好,除了一个例外,如果truc.html()为-1,那么它将转到-11而不是0。

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

5 个答案:

答案 0 :(得分:6)

请勿使用eval()进行此类工作!使用parseIntNumber(...)或任何其他多种方法将值转换为Javascript中的数字。

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

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

或者

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

甚至这个:

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

这是有效的,因为将字符串数乘以1会将变量转换为数字。请注意 - 如果您乘以的变量不是有效数字,那么您将获得NaN

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

答案 1 :(得分:4)

首先尝试解析(永远不要使用eval)该值为整数:

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

请记住+也在JavaScript中执行字符串连接。如果你有一个字符串'1',并且你添加一个1的整数,它将产生一个'11'的字符串。

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

答案 2 :(得分:2)

此问题是因为javascript的concatentor是加号+,如果解析为字符串,+将导致字符串连接,而不是所需的添加。修复它,确保JS使用truc.html()函数将parseInt()解析为int,如下所示:

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

也不确定为什么你首先使用eval,Elliot已经触及了那里的问题..

答案 3 :(得分:1)

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

答案 4 :(得分:0)

您需要确保该值为整数,并且在这种情况下使用.text()会更好。

parseInt(truc.text(), 10)+1