2010-01-25 5 views
2

J'ai ces deux fonctions javascript et je souhaite les "fusionner" en une seule. Je vais ajouter un peu plus de ces fonctions de conversion plus tard et voudrais le garder simple et plus propre que de simplement dupliquer les fonctions.Fusionner plusieurs fonctions javascript en une seule

<!--Convert kg in pnd--> 
<script type="text/javascript"> 
function init(){ 
document.getElementById('kg').onmouseup=function() { 
if(isNaN(this.value)) { 
    alert('numbers only!!'); 
    document.getElementById('kg').value=''; 
    document.getElementById('pnd').value=''; 
    return; 
} 
    document.getElementById('pnd').value=(this.value*2.2046).toFixed(1); 
    } 
} 
if(window.addEventListener){ 
    window.addEventListener('load',init,false); 
} 
else { 
if(window.attachEvent){ 
    window.attachEvent('onload',init); 
    } 
} 
</script> 

<!--Convert cm in feet--> 
<script type="text/javascript"> 
function start(){ 
document.getElementById('hauteur_cm').onmouseup=function() { 
if(isNaN(this.value)) { 
    alert('numbers only!!'); 
    document.getElementById('hauteur_cm').value=''; 
    document.getElementById('hauteur_pieds').value=''; 
    return; 
} 
    document.getElementById('hauteur_pieds').value=(this.value*0.03280839895).toFixed(1); 
    } 
} 
if(window.addEventListener){ 
    window.addEventListener('load',start,false); 
} 
else { 
if(window.attachEvent){ 
    window.attachEvent('onload',start); 
    } 
} 
</script> 

Merci pour l'aide

+1

Il est pas vraiment clair du tout ce que vous demandez. –

+0

Pourquoi avez-vous deux fonctions en premier lieu? – Pointy

+0

vous avez simplement besoin de convertir la fonctionnalité commune en une seule fonction, et ajouter des paramètres pour transmettre les valeurs que vous voulez. Ces valeurs peuvent inclure des ID d'élément cible, etc. –

Répondre

1

Faire un objet qui contient une liste des paires d'unités:

var unitPairs = [ 
    { from: 'kg', to: 'pnd', factor: 2.2046 }, 
    { from: 'hauteur_cm', to: 'hauteur_pieds', factor: 0.03280839895 }, 
    /* ... */ 
]; 

Ensuite, vous pouvez écrire une fonction qui gère tous:

function init() { 
    for (var i = 0; i < unitPairs.length; ++i) { 
    var pair = unitPairs[i]; 
    document.getElementById(pair.from).onmouseup = function() { 
     if (isNaN(this.value)) { 
     // ... 
     } 
     document.getElementById(pair.to).value = (this.value * pair.factor).toFixed(1); 
    } 
    // ... 
    } 
} 

De même, vous devriez utiliser un framework comme jQuery pour effectuer certains travaux de liaison d'événements.

0

Je pense que votre problème est que vous voulez avoir 2 fonctions différentes appelées onload, non? Si tel est le cas, envisagez de créer une classe de mise en attente (Extrait du Javascript: The Definitive Guide):

function runOnLoad(f) { 
    if (runOnLoad.loaded) f(); 
    else runOnLoad.funcs.push(f); 
} 

runOnLoad.funcs = []; 
runOnLoad.loaded = false; 

runOnLoad.run = function() { 
    for (var i = 0; i < runOnLoad.funcs.length; i++) { 
      try { runOnLoad.funcs[i](); } 
      catch(e) { } 
     } 
    delete runOnLoad.funcs; 
    delete runOnLoad.run; 
}; 

Ensuite, si vous incluez ce fichier, tout ce que vous devez faire pour ajouter une autre fonction à la liste onload est appel:

runOnLoad(init) 
runOnLoad(start) 

etc.

0

C'est vraiment une deviner ce que vous voulez parce que vous n'êtes pas être très précis, mais il semble que vous créez des fonctions de conversion

function Conversion(ConvertFrom, ConvertTo) 
{ 
    document.getElementById(ConvertFrom).onmouseup=function() { 
     if(isNaN(this.value)) { 
      alert('numbers only!!'); 
      document.getElementById(ConvertFrom).value=''; 
      document.getElementById(ConvertTo).value=''; 
      return; 
     } 

     switch(ConvertFrom + ">" + ConverTo) 
     { 
      case "kg>pnd": 
       document.getElementById(ConvertTo).value(this.value*2.2046).toFixed(1); 
       break; 
      // other case follow this form 
     } 
    } 
} 

En ce qui concerne la valeur de la conversion Je recommande d'utiliser quelque chose le long des lignes d'un commutateur pour chaque taux de conversion

Questions connexes