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 の場合、0 ではなく -11 になります。

なぜそれが機能しないのですか?(ここで試すことができます: http://91.121.154.130/?sort=last with id:azerty pw:azerty)

4

5 に答える 5

6

eval()この種の作業には使用しないでください。parseIntNumber(...)、または Javascript で値を数値に変換する他の多数の方法のいずれかを使用します。

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

関数の 2 番目のパラメーターに注意してください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 で数値を文字列に追加すると、数値は単純に文字列に連結され、計算は実行されません。(例: "-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 に答える