0

一个基本的理解问题:

有一个带有 onClick 操作的元素 - 正在进行多个 javascript 调用:

onclick="function1();function2();function3()"

但是,由于功能 3 取决于功能 1 操作,我需要确保功能 3 不会触发,直到功能 1 全部完成。这似乎不是事物的自然顺序,实际上似乎所有 3 个函数或多或少地同时触发(至少不等待彼此完成)。无论如何我可以做到这一点?

编辑:不能从同一个函数调用中完成所有操作,它(主要是)更新某些 div 的 ajax 调用......

进一步编辑:好的,可以看到它可能需要进一步澄清(认为有一种简单,合乎逻辑的方式来处理它,可以这么说)......

函数调用触发 ajax 动作,它通过 PHP 更新页面上的内容(div)。如果我应该使用返回值,那么我应该修改我的中央 ajax js 函数,以便它在完成时返回一些东西,并且只有在设置了这个值时才触发下一个函数?任何人都有一个很好的片段可以在一个 onClick 事件中执行此操作..?:-)

或者......作为黑客的东西 - 我应该在function3前面延迟1秒吗?:-) 我将如何直接在 onClick 事件中进行处理..?:-)

4

3 回答 3

1

您可以使用回调:

function function1(callback) {
    // do your stuff
    if (callback) { callback(); } // calls your next function
}
function function2(callback) {
    // do your stuff
    if (callback) { callback(); } // calls your next function
}
function function3() {
    // function 3 stuff
}

如果您依赖 asetTimeout来完成,只需将您的调用添加到您的部分中的回调中setTimeout

并这样称呼它:

<a onclick="function1(function() { function2( function() { function3() }) });">call functions</a>
于 2013-05-08T06:47:59.617 回答
0

而不是直接调用所有函数 onClick 你应该尝试从另一个函数调用一个函数

像这样的东西:

onClick="function1()"

然后从 funtion1() 调用 funtion2()

function function1()
{
//your code here

funtion2();

}

等等....

于 2013-05-08T06:39:18.800 回答
-1

如果您不想更改 onclick 定义,则可以这样做:

onclick="function1();function2();function3();"

脚本:

function1Complete = false;

function1(){
// some stuff
function1Complete = true;
}

function3(){
  if (function1Complete){
    // Put your code here
  }else{
    setTimeout(function3, 1000);
  }
}

这不是最好的和清洁的解决方案。但是,如果您没有任何其他解决方案,这将对您有所帮助。

于 2013-05-08T09:10:57.167 回答