Объединить несколько функций JavaScript в одну - PullRequest
2 голосов
/ 25 января 2010

У меня есть эти две функции 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>

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

Ответы [ 3 ]

1 голос
/ 25 января 2010

Создайте объект, содержащий список пар единиц:

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 голосов
/ 25 января 2010

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

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

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

0 голосов
/ 25 января 2010

Я думаю, что ваша проблема в том, что вы хотите иметь две разные функции, называемые onload, верно? Если это так, рассмотрите возможность создания класса очередей (взято из Javascript: полное руководство):

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

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

runOnLoad(init)
runOnLoad(start)

и т.д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...