一个基本的理解问题:
有一个带onClick操作的元素 - 正在进行多个javascript调用:
onclick="function1();function2();function3()"
但是,由于函数3依赖于function1动作,我需要确保function3没有触发,直到function1全部完成。这似乎不是事物的自然顺序,在实践中似乎所有3个函数都在同时或多或少地发射(至少不等待彼此完成)。无论如何我能做到这一点吗?
编辑:不能从同一个函数调用中完成所有操作,它(大多数情况下)是更新某些div的ajax调用...进一步编辑:好的,可以看出它可能需要进一步澄清(认为有一种简单,合理的方式来处理它,可以这么说)...
函数调用正在触发ajax动作,它通过PHP - 更新页面上的内容(div)。如果我应该使用返回值,那么我应该修改我的中央ajax js函数,以便它将在完成时返回一些东西,并且只有在设置了这个值时才触发下一个函数?任何人都有一个很好的片段在一个单一的onClick事件中执行此操作..? : - )
或者......作为一个黑客攻击的东西 - 我应该在function3前面延迟1秒钟吗? :-)我如何直接在onClick事件中进行...? : - )
答案 0 :(得分: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
}
如果您依靠setTimeout
完成,只需将您的通话添加到setTimeout
部分的回调中。
并将其称为:
<a onclick="function1(function() { function2( function() { function3() }) });">call functions</a>
答案 1 :(得分:0)
而不是直接调用所有函数onClick你应该尝试从另一个函数调用一个函数
类似的东西:
onClick="function1()"
然后从funtion1()调用funtion2()
function function1()
{
//your code here
funtion2();
}
依旧......
答案 2 :(得分:-1)
如果您不想更改onclick定义,那么您可以这样做:
onclick="function1();function2();function3();"
脚本:
function1Complete = false;
function1(){
// some stuff
function1Complete = true;
}
function3(){
if (function1Complete){
// Put your code here
}else{
setTimeout(function3, 1000);
}
}
这不是最好的清洁解决方案。但如果您没有任何其他解决方案,这将对您有所帮助。