带-1的eval加法不起作用

Dav*_*ong 0 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;
});                 
Run Code Online (Sandbox Code Playgroud)

所以我还有3个相同的功能,用于downvoting,un-upvoting和upvoting.它运行良好除了有一个例外,如果truc.html()是-1,那么它将转到-11而不是0.

知道为什么它不起作用吗?(:你们可以在这里尝试http://91.121.154.130/?sort=last与ID:AZERTY PW:AZERTY)

Ell*_*lle 6

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

truc.html(parseInt(truc.html(), 10) + 1);
Run Code Online (Sandbox Code Playgroud)

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

要么

truc.html(Number(truc.html())+1);
Run Code Online (Sandbox Code Playgroud)

甚至这个:

truc.html(truc.html()*1 + 1);
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为将字符串数乘以1会将变量转换为数字.小心 - 如果你乘的变量不是有效的数字,你会得到NaN!

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

  • 不要忘记`parseInt`的基数参数. (2认同)
  • 不,我编辑了我的答案(之前不正确).为混乱道歉. (2认同)