我知道这是基本的,但在查看了多个资源(例如this)后,我陷入困境。如何嵌套functionTwo
以使其仅在functionOne
完成后运行?这是我的尝试。 (我实际上想在functionTwo中做一些更复杂的事情,我只是简化了这个测试用例。)
$(function () {
functionOne();
});
function functionOne() {
$(".foo:first").attr('id','bar');
functionTwo();
}
function functionTwo() {
console.log($('.foo:first').attr('id')); // log the new id: 'bar'
}
这有效,但它们是否独立运行?当我put a timeout on the first function时,没有任何记录(除非这是一个单独的错误)。
然后我尝试了这个:
$(function () {
functionOne();
});
function functionOne() {
$(".foo:first").attr('id', 'bar', function () {
functionTwo();
});
}
function functionTwo() {
console.log($('.foo:first').attr('id'));
}
没有记录任何内容。如果.attr
然后:
$(function () {
$.when.functionOne().done(function () {
functionTwo();
});
});
function functionOne() {
$(".foo:first").attr('id', 'bar');
}
function functionTwo() {
console.log($('.foo:first').attr('id'));
}
没有记录任何内容。我不认为.when
和.done
应该以这种方式使用。
那我应该如何筑巢呢?
答案 0 :(得分:2)
第一个是前往这里的方式。
$(function () {
functionOne();
});
function functionOne() {
$(".foo:first").attr('id','bar');
functionTwo();
}
function functionTwo() {
console.log($('.foo:first').attr('id')); // log the new id: 'bar'
}
.attr
是同步的,因此按预期工作。
在setTimeout
示例(http://jsfiddle.net/nathanbweb/t9pAR/2/)中,您错误地使用了setTimeout
。
setTimeout(function functionOne() {}, 2000)
这不符合你的想法。这将创建一个函数,并在2秒后运行它。名称functionOne
将仅仅存在于函数自己的范围内。
你可能想要这个:
$(function () {
functionOne();
});
function functionOne() {
setTimeout(function(){
$(".foo:first").attr('id','bar');
functionTwo();
}, 2000);
}
function functionTwo() {
console.log($('.foo:first').attr('id')); // log the new id: 'bar'
}
答案 1 :(得分:1)
为什么不尝试返回您想要调用的功能。
function functionOne() {
$(".foo:first").attr('id','bar');
return functionTwo();
}