【问题标题】:Merge multiple javascript functions into one将多个javascript函数合并为一个
【发布时间】:2010-01-25 17:02:51
【问题描述】:

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

感谢您的帮助

【问题讨论】:

  • 你问的不是很清楚。
  • 为什么一开始就有两个函数?
  • 您只需将常用功能转换为单个功能,并添加参数以传入您想要的值。此类值可能包括目标元素 ID 等。
  • 如果我的问题不清楚,我很抱歉。我有代码进行一次转换(从公斤到磅)。稍后我将需要更多的转换,并想知道如何将它们合并到同一个函数中,而不是添加另一个(如上)。谢谢。
  • 使用javascript“切换”功能:w3schools.com/jS/js_switch.asp

标签: javascript merge coding-style


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

【讨论】:

    【解决方案2】:

    这确实是您想要的猜测,因为您不是很具体,但似乎您正在创建转换函数

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

    就转化价值而言,我建议为每个转化率使用类似于开关的东西

    【讨论】:

      【解决方案3】:

      我认为你的问题是你想要有 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)
      

      等等

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-08-19
        • 1970-01-01
        • 2021-10-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多