将多个javascript函数合并为一个

时间:2010-01-25 17:02:51

标签: javascript merge coding-style

我有这两个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 个答案:

答案 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这样的框架来为你做一些事件绑定工作。

答案 1 :(得分:0)

我认为你的问题是你希望有2个不同的函数叫做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;
};

然后,如果你包含这个文件,你需要做的就是在onload列表中添加另一个函数:

runOnLoad(init)
runOnLoad(start)

答案 2 :(得分: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
        }   
     }
 }

就转换的价值而言,我建议在每个转换率的开关线上使用某些东西