Comment forcer l'addition au lieu de la concaténation en javascript [dupliquer]

cette question a déjà une réponse ici:

j'essaie d'ajouter tout le contenu calorique dans mon javascript comme ceci:

$(function() {
    var data = [];

    $( "#draggable1" ).draggable();
    $( "#draggable2" ).draggable();
    $( "#draggable3" ).draggable();

    $("#droppable_box").droppable({
        drop: function(event, ui) {
            var currentId = $(ui.draggable).attr('id');
            var total = 0;
            data.push($(ui.draggable).attr('id'));

            if(currentId == "draggable1"){
            var myInt1 = parseFloat($('#MealplanCalsPerServing1').val());
            }
            if(currentId == "draggable2"){
            var myInt2 = parseFloat($('#MealplanCalsPerServing2').val());
            }
            if(currentId == "draggable3"){
            var myInt3 = parseFloat($('#MealplanCalsPerServing3').val());
            }
        if ( typeof myInt1 === 'undefined' || !myInt1 ) {
        myInt1 = parseInt(0);
        }
        if ( typeof myInt2 === 'undefined' || !myInt2){
        myInt2 = parseInt(0);
        }
        if ( typeof myInt3 === 'undefined' || !myInt3){
        myInt3 = parseInt(0);
        }
        total = parseFloat(myInt1 + myInt2 + myInt3);
        $('#response').append(total);
        }
    });
    $('#myId').click(function(event) {
        $.post("process.php", ({ id: data }), function(return_data, status) {
            alert(data);
            //alert(total);
        });
    });
});

au lieu d'ajouter les variables sont concaténées. J'ai essayé d'utiliser parseInt, parseFloat, et nombre, mais j'ai toujours la concaténation et pas l'addition. S'il vous plaît regarder la source de la vue à http://maureenmoore.com/momp_112412/121912_800.html

33
demandé sur Maureen Moore 2012-12-19 17:56:07

3 réponses

votre code concaténate trois chaînes, puis convertit le résultat en un nombre.

vous devez convertir chaque variable en un nombre en appelant parseFloat() autour de chacun.

total = parseFloat(myInt1) + parseFloat(myInt2) + parseFloat(myInt3);
57
répondu SLaks 2012-12-19 13:59:19

devrait également pouvoir le faire:

total += eval(myInt1) + eval(myInt2) + eval(myInt3);

cela m'a aidé dans une situation différente, mais similaire.

5
répondu vapcguy 2015-03-28 03:14:03

l'énoncé suivant ajoute la valeur à l'élément avec l'id de response

$('#response').append(total);

cela donne l'impression que vous concaténez les cordes, mais vous ne le faites pas, vous les ajoutez en fait à l'élément

remplacer par

$('#response').text(total);

vous devez changer l'événement de goutte de sorte qu'il remplace la valeur de l'élément avec le total, vous devez également garder une trace de ce que le total est, I suggérez quelque chose comme le suivant

$(function() {
    var data = [];
    var total = 0;

    $( "#draggable1" ).draggable();
    $( "#draggable2" ).draggable();
    $( "#draggable3" ).draggable();

    $("#droppable_box").droppable({
        drop: function(event, ui) {
        var currentId = $(ui.draggable).attr('id');
        data.push($(ui.draggable).attr('id'));

        if(currentId == "draggable1"){
            var myInt1 = parseFloat($('#MealplanCalsPerServing1').val());
        }
        if(currentId == "draggable2"){
            var myInt2 = parseFloat($('#MealplanCalsPerServing2').val());
        }
        if(currentId == "draggable3"){
            var myInt3 = parseFloat($('#MealplanCalsPerServing3').val());
        }
        if ( typeof myInt1 === 'undefined' || !myInt1 ) {
            myInt1 = parseInt(0);
        }
        if ( typeof myInt2 === 'undefined' || !myInt2){
            myInt2 = parseInt(0);
        }
        if ( typeof myInt3 === 'undefined' || !myInt3){
        myInt3 = parseInt(0);
        }
        total += parseFloat(myInt1 + myInt2 + myInt3);
        $('#response').text(total);
        }
    });

    $('#myId').click(function(event) {
        $.post("process.php", ({ id: data }), function(return_data, status) {
            alert(data);
            //alert(total);
        });
    });
});

j'ai déplacé l'énoncé var total = 0; de l'événement de largage et j'ai changé l'énoncé d'affectation de ce

total = parseFloat(myInt1 + myInt2 + myInt3);

à ce

total += parseFloat(myInt1 + myInt2 + myInt3);

voici un exemple pratique http://jsfiddle.net/axrwkr/RCzGn /

1
répondu 2012-12-19 14:21:34