【问题标题】:How to run more than one JavaScript function with one click如何一键运行多个 JavaScript 函数
【发布时间】:2011-04-26 05:33:58
【问题描述】:

如何一键运行五个 JavaScript 函数?

示例代码:

<img alt="move right" 
     src="Pictures/sides/right.gif" 
     id="MoveRight" 
     ***onclick="javascript:moveObjRight('ground','sky','mountain');"***
     style="z-index: 1; left: 801px; top: 37px; position: absolute; height: 33px; width: 34px;" 
/>

【问题讨论】:

  • 我猜函数调用是同步进行的。只有在上一个通话完成后,您才能拨打电话。不过我不确定。

标签: javascript


【解决方案1】:
<img alt="move right" src="Pictures/sides/right.gif" id="MoveRight"
    onclick="moveObjRight('ground','sky','mountain');myFunction2();myFunction3();myFunction4();myFunction5();"
    style="z-index: 1; left: 801px; top: 37px; position: absolute; height: 33px;
    width: 34px;" />

<script type="text/javascript">
window.onload = function() {
    var ele = document.getElementById('MoveRight');
    ele.onclick = function() {
        moveObjRight('ground','sky','mountain');
        myFunction2();
        myFunction3();
        myFunction4();
        myFunction5();
    }
};
</script>

请注意,第二个选项将覆盖任何先前分配的 window.onloadele.onclickfunction。如果您使用的是 javascript 库,请使用适当的 dom 就绪事件(例如 jQuery:$(document).ready(function(){/*code*/}); 或简称:$(function(){/*code*/})

【讨论】:

  • @Thomas MyFunction2() 只会在 moveObjRight(..) 之后被调用,对吗?有什么方法可以异步调用所有函数?
  • 是否可以在线程模式下运行函数,我的意思是所有函数一次运行而不是一个一个运行?
  • 并非如此,请记住所有 javascript 引擎(我知道)都同步运行 javascript - 即使在执行 onclick 之类的事件函数时,该页面上的所有其他 javascript 也会停止。
  • 不是真的,当你控制它运行时,它永远不会同时执行 2 个函数。 setTimeout 的真正目的是稍后运行一个函数(顺便说一句。请注意,不能保证它会在指定的时间/毫秒后准确运行)。
  • Javascript 是单线程,你不能异步运行函数。您可以异步运行 xmlHTTPRequests,但是当它们返回时,它们的回调函数将被放入队列中并轮流运行。 setTimeout 允许函数在某个时间间隔后运行,但不提供任何异步行为。
【解决方案2】:

你可以在img标签的onclick属性中添加你所有的功能

<img onclick="fnc1();fnc2();..." />

【讨论】:

    【解决方案3】:

    您可以在点击事件上调用单个方法,并且在该方法中您可以调用所有其他方法。

    【讨论】:

      【解决方案4】:

      在另一个函数中调用多个函数

      <script type="text/javascript">
         function CallMultipleFunctions() {
           Function1();
           Function2();
           Function3();
           Function4();
      }
      </script>
      
      <img onclick= "CallMultipleFunctions()"/>
      

      编辑:

      检查这个link

      【讨论】:

      • 是否可以在线程模式下运行函数,我的意思是所有函数一次运行而不是一个一个运行?
      • 出于所有编程考虑,Javascript 是单线程的[1] 但是,由于 Web 浏览器模型是单线程的,所有四个函数在用户获得控制权之前运行背部。在我们为您提供其他解决方案的建议之前,您需要说明您为什么需要不同的东西。 [1]是的,有网络工作者,但他们无法与 UI 交互,所以我忽略了他们。
      最近更新 更多