2010-10-12 4 views
0

Je cherche à appeler ma fonction clear() JS pour effacer les valeurs de texte dans certains champs de saisie de ma page Web, mais pour une raison quelconque, la fonction ne semble pas appelée correctement. Je crois que ceci peut être un problème de scope, mais je ne suis pas sûr.Fonction javascript sans appel possible en raison d'un problème de portée

Voici mon code, le script et le style maintenus ensemble pour la facilité d'utilisation actuellement, mais raccommoder une fois les scripts est finalisé:

<!DOCTYPE html> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>Quadratic Root Finder</title> 
<script> 
function calculateQuad() 
{ 
    var inputa = document.getElementById('variablea').value; 
    var inputb = document.getElementById('variableb').value; 
    var inputc = document.getElementById('variablec').value; 

    root = Math.pow(inputb,2) - 4 * inputa * inputc; 
    root1 = (-inputb + Math.sqrt(root))/2*inputa 
    root2 = (-inputb + Math.sqrt(root))/2*inputa 

    document.getElementById('root1').value = root1; 
    document.getElementById('root2').value = root2; 
    if(root<'0') 
    { 
     alert('This equation has no real solution.') 
    } 
    else { 
     if(root=='0') 
     { 
      document.getElementById('root1').value = root1 
      document.getElementById('root2').value = 'No Second Answer' 
     } 
     else { 
      document.getElementById('root1').value = root1 
      document.getElementById('root2').value = root1 
      } 
     } 
} 
function clear() 
{ 
    document.getElementById('variablea').value = ""; 
    document.getElementById('variableb').value = ""; 
    document.getElementById('variablec').value = ""; 
} 
</script> 
<style> 
#container 
{ 
    text-align: center; 
} 
</style> 
</head> 

<body> 
<div id="container"> 
<h1>Quadratic Root Finder!</h1> 
<form id="form1"> 
    a:<input id="variablea" value="" type="text"> 
    <br/> 
    b:<input id="variableb" value="" type="text"> 
    <br /> 
    c:<input id="variablec" value="" type="text"> 
    <br /> 
    <input id="calculate" value="Calculate!" type="button" onClick="calculateQuad()"> 
    <input id="erase" value="Clear" type="button" onClick="clear()"> 
    <br /> 
    <br /> 
    Roots: 
    <br /> 
    <input id="root1" type="text" readonly> 
    <br /> 
    <input id="root2" type="text" readonly> 
</form> 
</div> 
</body> 
</html> 
+0

Si vous allez être. assez poli pour utiliser un puits pour N'oubliez pas que tous les noms d'attributs doivent être en minuscules (même les gestionnaires d'événements en ligne - "onclick"; pas "onClick") ... en fait, votre HTML est très bizarre ... vous devriez juste supprimer les barres obliques des éléments qui se referment tous ensemble (les sauts de ligne). –

Répondre

2

Vous devez renommer la méthode « claire ». Essayez de le nommer "clearFields" ou quelque chose comme ça. (;

Aussi, si vous voulez seulement réinitialiser les champs de formulaire, vous pouvez aussi le faire: onclick = « this.form.reset() »

+0

Aghhhh !! : D Merci de l'avoir signalé. Pourquoi est-il nécessaire de renommer? Est-il réservé, ou un nom en double, ou quoi ?? haha Merci pour la suggestion alternative et plus facile aussi. – Qcom

+1

Oui, 'clear' est plutôt réservé dans ce contexte. Je vous en prie. (: – aLfa

1

Vous pouvez éviter le problème avec la fonction de nommage entièrement à l'aide :

document.getElementById("calculate").onclick = function() { 
    ... 
}; 

document.getElementById("erase").onclick = function() { 
    ... 
}; 

Ceci est en fait une méthode préférée d'ajouter des gestionnaires d'événements par les développeurs web car il évite d'encombrer le code HTML avec des extraits inline de JavaScript tout en conservant la compatibilité cross-browser

+0

Merci, j'aime beaucoup ça aussi, si j'utilise un simple JS, cela rend le code moins discret. – Qcom