我当前正在运行以下代码:
$("document").ready(function() {
$(".tableCourses td:first").trigger('click');
setTimeout(function() {
$(".tableTutors tr:eq(1) td:eq(0)").trigger('click');
setTimeout(function() {
$(".tableForms tr:eq(1) td:eq(0)").trigger('click');
setTimeout(function() {
$(".tableDivision tr:eq(2) td:eq(3)").trigger('click');
}, 800);
}, 700);
}, 600);
});
这基本上是为我所拥有的每个表的每个第一个单元格激活我的onclick
事件。
不要评判。。这正是我需要的。setTimeout
有点难看,而且只有一半的时间有效。
问题是每个表都必须加载ajax,这可能需要一些时间。当我使用这个代码:
$("document").ready(function() {
$.when($(".tableCourses td:first").trigger('click')).then(function() {
$.when($(".tableTutors tr:eq(1) td:eq(0)").trigger('click')).then(function() {
$.when($(".tableForms tr:eq(1) td:eq(0)").trigger('click')).then(function() {
$(".tableDivision tr:eq(2) td:eq(3)").trigger('click');
});
});
});
});
页面只执行第一个单击处理程序,该处理程序正在加载下一个表。我用错$.when
和$.then
了吗?我的语法错了吗?
我通常从不接触jquery或ajax,所以我有点蒙在鼓里。
另一个注意事项:第一次点击必须从两个独立的php页面加载两个表,这样一个需要更长的时间。
EDIT:我刚刚意识到$.when
和$.then
只是用于点击激活,而不是整个ajax加载。有什么方法可以检测这些操作何时完成?
EDIT 2:这是onclick事件,每次点击几乎相同:
<script>
function courseToTutor(id) {
var clickedCourse = document.getElementById("course" + id).value;
$.post('loadTutors', {postname: clickedCourse}, function() {
$('#loadTutors').load('loadTutors.php');
$('#loadForms').load('loadForms.php');
});
;
window.scrollTo(0, 0);
}
</script>
这很复杂。。哈哈。在我开始页面加载的下一个onclick事件之前,我需要以某种方式检查这些功能何时完成?
done
、error
和always
的回调。
查看文档
当调用成功、出现错误或以其他方式(分别)结束时,这些函数将被激活。
您可以使用promise
var promise = $.ajax({
url: "/ServerResource.txt"
});
promise.done(successFunction);
promise.fail(errorFunction);
promise.always(alwaysFunction);
请查看关于使用jquery延期做出承诺的明确解释
为了触发then,您需要使用一个返回适当响应的函数。当Deferred被解析或拒绝时,通常由最初创建Deferred的代码执行,将调用适当的回调。例如,jQuery.ajax()返回的jqXHR对象是Promise兼容的对象。触发器不返回Promise兼容的对象,所以您应该手动返回一个成功的Promise兼容对象。例如:
var myResponse = $.Deferred();
$(".tableTutors tr:eq(1) td:eq(0)").trigger('click');
myResponse .resolve( "clicked" );
$.when(myResponse ).then(function() {
$(".tableForms tr:eq(1) td:eq(0)").trigger('click')
});
....