2015-03-05 1 views
2

J'ai créé ce convertisseur de température en JavaScript, il s'exécute et calcule de manière appropriée, mais je reçois un certain "comportement inattendu" et j'ai du mal à comprendre pourquoi cela se produit.Convertisseur de température utilisant JavaScript

Le comportement qui se produit est que si je clique dans la zone de texte Celsius ou Fahrenheit, il génère automatiquement des valeurs: -32 dans la zone de texte Celsius et 32 ​​dans la zone de texte Fahrenheit. Une fois que je supprime l'une des valeurs produites automatiquement à partir de la zone de texte, il convertira comme suit:

100C il convertit en 212F et si vous entrez 32F il convertit en 0C.

Cette partie est plus d'un bonus pour voir si je pouvais convertir de toutes les 3 mesures de température Fahrenheit, Celsius et Kelvin. Il ne convertit pas si vous entrez une valeur en Fahrenheit ou en Celsius, mais si vous entrez un nombre directement dans la zone de texte Kelvin, il convertira les 2 autres mesures de manière cohérente. Ai-je besoin d'une boucle ou d'une instruction de contrôle pour ajouter Kelvin de manière appropriée à ce programme?

la forme de tags de nom est "convertisseur" est ici le code:

function toCelsius() { 
    document.converter.fahrenheit.value =(document.converter.celsius.value * 9/5) + 32; 
} 

function toFahrenheit() { 
    document.converter.celsius.value = (document.converter.fahrenheit.value *5/9) -32; 
} 

function toKelvin(){ 
    document.converter.celsius.value = document.converter.kelvin.value - 273.15; 
    document.converter.fahrenheit.value=((document.converter.kelvin.value - 273.15)*9/5)+32; 
} 
+3

Pouvez-vous poster le code complet qui fait cela? ici ou en utilisant jsfiddle.net –

+1

Votre algorithme pour fahrenheit à celsius est faux, il devrait être '(fahrenheit - 32) * 5/9'. De même pour * toKelvin *. ;-) – RobG

Répondre

1

Les formules sont les suivantes:

°F = °C x 9/5 + 32 
°C = (°F - 32) x 5/9 

donc:

function toFahrenheit() { 
    document.converter.celsius.value = (document.converter.fahrenheit.value - 32) * 5/9; 
} 

Quant à la question de bonus, je pense que vous devez attacher une fonction de gestionnaire à chacun des 3 éléments input (en supposant que vous utilisez ceux-ci) un nd synchronise les autres valeurs en conséquence. Pas besoin d'une boucle. Quelque chose comme ceci:

<input id='c' type="number" onchange="converter_function('c', this.value)" />°C 

http://jsfiddle.net/teyw4tah/2/

Pour les puristes:

http://jsfiddle.net/teyw4tah/3/

+0

Je recommanderais de ne pas enseigner les attributs 'onchange' car ils nécessitent la création de valeurs globales et votre page web deviendra très vite un désastre impossible à maintenir. Au lieu de cela, utilisez 'addEventListener' pour attacher des fonctions correctement définies. –

+1

Je suis d'accord, mais je voulais le garder aussi simple que possible – sebnukem

+0

Merci pour vos réponses et la clarté. Merci de rester simple. Je commence juste en Javascript alors je ne sais pas encore comment gérer les évènements. J'ai de l'expérience avec C#. J'imagine que manipuler des objets est différent en Javascript? –