2017-09-30 4 views
0

Je veux faire un formulaire de distribution de points. J'ai reçu 4 entrées type numéro valeur 0-100 et total = 100 points. Nous pouvons donc mettre 25 points dans chaque entrée. Je l'ai déjà fait pour valider le nombre d'entrées min 0 max 100 et il soustrait de la valeur d'entrée totale modifiée. J'ai un problème avec l'ajout de Total. Si l 'utilisateur a déjà changé de valeur, j'ai besoin de faire la valeur Total + (avant modification) et ensuite Total - valeur (après changement). Je ne sais pas comment obtenir de la valeur avant le changement.Récupère une ancienne valeur d'entrée avant modification et change la valeur totale en + ou -

Mon html

<input type="number" min="0" max="100" name="1" /> 
<input type="number" min="0" max="100" name="2" /> 
<input type="number" min="0" max="100" name="3" /> 
<input type="number" min="0" max="100" name="4" /> 
<input type="text" id="Total" name="Total" value="100"/> 

Mon script

$("input[type=number]").keyup(function(event) { 
    max=100; 
    min=0; 
    value=(parseInt($(this).val())); 
    if(value < min || isNaN(parseInt(value))) 
     $(this).val(0) 
    else if(value > max) 
     $(this).val(100); 
    else return value; 
}); 

var total, myVal; 
$("input[type=number]").change(function(event) { 
    maxPoints = parseInt($('#Total').val()); 
    myVal = (parseInt($(this).val()) || 0); 
    total = maxPoints - myVal; 
    $('#Total').val(total); 
}); 

Si je serais en mesure d'enregistrer ancienne valeur dans une certaine var je changerais .onchange script quelque chose comme ça et je pense que cela devrait fonctionner . Mais comment puis-je obtenir une ancienne valeur?

$("input[type=number]").change(function(event) {  
    oldValue = ???? - how to get this ? :P 
    if(oldValue>0){ 
     maxPoints = parseInt($('#Total').val()) + oldValue; 
    }else{ 
     maxPoints = parseInt($('#Total').val()); 
    }  
    myVal = (parseInt($(this).val()) || 0); 
    total = maxPoints - myVal; 
    $('#Total').val(total); 
}); 

Il ya js fiddle comment cela fonctionne maintenant. Fiddle here

Répondre

1

Salut Il suffit d'enregistrer l'ancienne valeur comme celui-ci

$("input[type=number]").change(function(event) {  
 
    oldValue = $(this).data('oldvalue'); 
 
    if(oldValue>0){ 
 
     maxPoints = parseInt($('#Total').val()) + oldValue; 
 
    }else{ 
 
     maxPoints = parseInt($('#Total').val()); 
 
    }  
 
    myVal = (parseInt($(this).val()) || 0); 
 
    total = maxPoints - myVal; 
 
    $(this).data('oldvalue',$(this).val()) // update old value to new value 
 
    $('#Total').val(total); 
 
});
<input type="number" min="0" data-oldvalue='0' max="100" name="1" /> 
 
<input type="number" min="0" data-oldvalue='0' max="100" name="2" /> 
 
<input type="number" min="0" data-oldvalue='0' max="100" name="3" /> 
 
<input type="number" min="0" data-oldvalue='0' max="100" name="4" /> 
 
<input type="text" id="Total" name="Total" value="100"/>

+0

Merci beaucoup :) cela fonctionne maintenant j'ai besoin que de bloquer la possibilité de distribuer plus de 100 points et ne laissez pas total pour aller sous 0 :) testera tout plus tard. – user3748197