2010-10-01 36 views
0

Comment est-ce que je pourrais changer ce code pour ne pas autoriser un 0 et supprimer tous les caractères non numériques?Supprime 0 et tous les caractères non numériques.

<script type="text/javascript"> 
    (function() { 
     var a= document.getElementsByName('a')[0]; 
     var b= document.getElementsByName('b')[0]; 
     var c= document.getElementsByName('c')[0]; 

     a.onchange=b.onchange=a.onkeyup=b.onkeyup= function() { 
      c.value= Math.ceil((a.value/b.value)*100); 
     }; 
    })(); 
</script> 

Répondre

2

EDIT: réponse mise à jour:

vous dépouillez simplement tous les numéros non non alors tester si le nombre est pas 0 vous pouvez effectuer votre fonction.

a.onchange=b.onchange=a.onkeyup=b.onkeyup= function() { 

    // 1. First we will remove all non numbers from the values inputted by the user. 
    var aValue = new String(a.value); 
    var bValue = new String(b.value); 

    //Use regular expressions to strip out the non numbers incase the user types in non numbers. 
    aValue = aValue.replace(/[^0-9]/g, ''); 
    bValue = bValue.replace(/[^0-9]/g, ''); 

    float newAValue = parseFloat("aValue"); 
    float newBValue = parseFloat("bValue"); 

    //2. Then test to see if the user has typed 0 as the value if they haven't then you an perform the maths. 

    if((newAValue != 0) && (newBValue != 0)) 
     c.value= Math.ceil((av/bv)*100); 
    }; 

Espérons que cela aide. Merci Faites-moi savoir si c'est le cas.

PK

+0

1) 'float' produit une erreur de syntaxe (devrait être 'var'), 2) il manque une accolade ouverte sur la 3ème à la dernière ligne, 3)' av 'et' bv' ne sont pas définis et devraient être 'aNewValue' et' bNewValue' sur la 2ème à la dernière ligne, 4) il produit 'NaN' s'il n'y a que des lettres dans l'entrée – sje397

+0

essayant de faire fonctionner cela mais sans avoir beaucoup de chance jusqu'à présent – James

+0

conserve résultant de "NAN" – James

1
a.onchange=b.onchange=a.onkeyup=b.onkeyup= function() { 
    var av = parseFloat(a.value), bv = parseFloat(b.value); 
    if(bv != 0) 
    c.value= Math.ceil((av/bv)*100); 
}; 
+0

c.value = bv! = 0? Math.ceil ((av/bv) * 100): "Invalide"; // Pour effacer le fichier en cas d'erreur. – some

+0

c'est faux pour une raison principale. vous ne pouvez pas parserFloat juste comme ça parce qu'il veut valider les données. S'il entre un caractère dans la valeur a ou b, alors une erreur se produira pendant l'exécution car le programme essayera d'analyser le non-numero dans un flottant. ce qui ne fonctionnera pas. – Pavan

+0

Il n'a pas dit qu'il voulait valider les données - et cela dépend donc de votre interprétation de "supprimer tous les caractères non numériques". Cette méthode ne produit pas d'erreur - mais peut évaluer le texte d'entrée comme 'NaN' s'il n'est pas 'analysable'. Il produit simplement «NaN» pour une entrée absurde - en ignorant effectivement les entrées non numériques - ce qui est mon interprétation de l'objectif du PO. – sje397