我遇到这个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)
不要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").