2010-01-25 2 views
2

У меня есть эти две функции javascript и вы хотите «объединить» их в один. Я добавлю еще несколько из этих функций преобразования позже и хотел бы сохранить его простым и чистым, чем просто дублирование функций.Объединить несколько функций javascript в один

<!--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> 

Спасибо за помощь

+1

Это на самом деле не совсем понятно, что вы просите. –

+0

Почему у вас есть две функции в первую очередь? – Pointy

+0

вам просто нужно преобразовать общую функциональность в одну функцию и добавить параметры для передачи значений, которые вы хотите. Такие значения могут включать идентификаторы целевых элементов и т. Д. –

ответ

1

Сделать объект, который содержит список пар единиц:

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

Тогда вы можете написать функцию, которая обрабатывает все из них:

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); 
    } 
    // ... 
    } 
} 

Также вы должны использовать фреймворк, например jQuery, для выполнения какой-либо операции привязки событий для вас.

0

Я думаю, что ваша проблема в том, что вы хотите иметь две разные функции, называемые onload, не так ли? Если это так, рассмотреть вопрос о создании класса массового обслуживания (из 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; 
}; 

Затем, если вы включите этот файл, все, что вам нужно сделать для того, чтобы добавить еще одну функцию в списке OnLoad это вызов:

runOnLoad(init) 
runOnLoad(start) 

т.д.

0

Это действительно догадка, как то, что вы хотите, потому что вы Арент быть очень конкретным, но кажется, что вы создаете функции преобразования

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 
     } 
    } 
} 

Что касается значения для преобразования я рекомендую использовать что-то вдоль линий переключателя для каждого коэффициента конверсии

Смежные вопросы