2010-08-20 5 views
1

Je voudrais multiplier les valeurs de deux zones de texte (txtBox1 devrait contenir une valeur entière, txtBox2 devrait contenir une valeur Float) et placez le résultat dans une troisième zone de texte. Mon code est ci-dessous, mais cela ne fonctionne pas. La fonction javascript est appelée, sinon elle échoue. Quelqu'un peut-il m'aider s'il vous plaît à coder correctement: \? MerciComment multiplier les valeurs de zone de texte avec javascript

 //the javascript function 
     function CalculateTotal(id1, id2) { 
      var txt1 = document.getElementById(id1); 
      var txt2 = document.getElementById(id2); 

      var total = txt1 * txt2; 
      document.getElementById("txtTotal").value = parseFloat(total); 
     } 

     //c# code, programmatically adding attribute 
     txtBox1.Attributes.Add("onBlur", "CalculateTotal('txtBox1, txtBox2')"); 
+0

Il est difficile de choisir une bonne réponse lorsque les deux sont très similaires. Il y avait un problème supplémentaire que j'ai rencontré dans mon code C#. Bien que les zones de texte ont été créées comme suit: TextBox txtBox1 = new TextBox(); Ce que je devais faire était également d'ajouter une valeur pour l'ID comme suit: txtBox1.ID = "txtBox1"; Merci pour votre aide! – brookmarker

Répondre

5

Vous devez changer

var total = txt1 * txt2; 

à

var total = txt1.value * txt2.value; 

txt1 et txt2 sont l'élément d'entrée lui-même, et non pas la valeur qu'ils contiennent.

Dans votre plus bas que vous utilisez .value vous pour régler le paramètre, comme indiqué par Dumitru @ Dan vous pouvez utiliser parseFloat/parseInt,)

[Modifier]

mais cela est plus utile si votre champs d'entrée contient du texte supplémentaire, des chiffres manquants avant un marqueur décimal, une notation exponentielle, etc.

4

Je pense que vous avez également un problème avec l'obtention des ID des zones de texte, avec des apostrophes distinctes pour chaque variable:

//the javascript function 
function CalculateTotal(id1, id2) { 
    var txt1 = document.getElementById(id1); 
    var txt2 = document.getElementById(id2); 

    var total = parseInt(txt1.value) * parseFloat(txt2.value); 
    document.getElementById("txtTotal").value = total; 
} 

//c# code, programmatically adding attribute 
txtBox1.Attributes.Add("onblur", "CalculateTotal('txtBox1', 'txtBox2')"); 
+0

Et lorsque vous utilisez parseInt vous voulez presque toujours passer le deuxième paramètre indiquant la base: parseInt (txtBox1.value, 10) –

+1

"S'il n'y a qu'un seul argument, la base de nombre est détectée selon la syntaxe générale de JavaScript pour les nombres. qui commencent par 0x ou -0x sont analysés comme des hexadécimaux, les chaînes commençant par 0 ou -0 sont analysées comme des nombres octaux Toutes les autres chaînes sont analysées comme des nombres décimaux. " Donc, si vous êtes préoccupé par les entrées comme 077 ou 0023, oui, vous devriez utiliser le deuxième paramètre. Mais je ne m'en soucierais pas. –

0

Replace to below code

//the javascript function 
    function CalculateTotal(id1, id2) { 
     var txt1 = document.getElementById("id1").value; 
     var txt2 = document.getElementById("id2").value; 
     var total = txt1 * txt2; 
     document.getElementById("txtTotal").value = parseFloat(total); 
    } 

    //c# code, programmatically adding attribute 
    txtBox1.Attributes.Add("onBlur", "CalculateTotal('txtBox1, txtBox2')");