JavaScript 在自定义事件中延迟
JavaScript Deferred in Custom Event
在jQuery插件"jQuery-Steps"上使用延迟在onStepChanging
事件中使用延迟时,我在等待延迟完成时遇到问题。此插件记录在 http://www.jquery-steps.com/.该步骤会立即返回,而不是等待延迟。在我的真实代码中,我正在执行 ajax 调用,我想等待结果,然后再继续下一步。
下面是一些示例代码:
$(document).ready(function() {
var form = $("#form1");
form.children("div").steps({
headerTag: "h3",
bodyTag: "section",
transitionEffect: "slideLeft",
onStepChanging: function(event, currentIndex, newIndex) {
$.when(asyncEvent()).then(function(status) {
return status;
});
}
});
});
function asyncEvent() {
var dfd = new $.Deferred();
setTimeout(function() {
dfd.resolve(true);
}, 2000);
return dfd.promise();
}
任何帮助将不胜感激!
您的代码期望异步函数同步返回,这将不起作用。这是一种替代方法,它将禁用更改步骤,直到承诺完成:
$(document).ready(function() {
var form = $("#form1");
// initialize the return value as false (since you want to wait for your promise to complete)
var stepReady = false;
form.children("div").steps({
headerTag: "h3",
bodyTag: "section",
transitionEffect: "slideLeft",
onStepChanging: function(event, currentIndex, newIndex) {
$.when(asyncEvent()).then(function(status) {
stepReady = status;
});
return stepReady;
}
});
});
function asyncEvent() {
var dfd = new $.Deferred();
setTimeout(function() {
dfd.resolve(true);
}, 2000);
return dfd.promise();
}
在这种情况下,最好直接在返回的承诺上使用done
,因为then
的目的是操纵状态。因此,它将更改为:
onStepChanging: function(event, currentIndex, newIndex) {
asyncEvent().done(function(status) {
stepReady = status;
});
return stepReady;
}
该步骤立即运行,无需等待您的延迟,因为 $.when 是异步运行的,并且在您的脚本中,您的返回状态为 $.when 回调,而不是 onStepChange。
我的建议,默认情况下,您需要返回错误的onStepChange事件,并手动进行步骤更改。
可能是这样的
onStepChanging: function(event, currentIndex, newIndex) {
$.when(asyncEvent()).then(function(status) {
if(status)
{
if (currentIndex < newIndex)
{
form.children("div").steps('next');
}
else
{
form.children("div").steps('previous');
}
}
});
return false;
}
抱歉,如果我写了一些错误,我没有很好地测试这段代码,我只是阅读了 http://www.jquery-steps.com/Examples 上的示例并尝试了解它是如何工作的,但主要思想只是默认返回 false 并手动进行步骤更改。.希望有帮助..
相关文章:
- 实现延迟的jquery更改事件处理程序
- 延迟单击事件,直到AJAX完成
- JavaScript 事件处理具有延迟的滚动事件
- 将单击事件附加到按钮或链接上的类,该按钮或链接会触发 AJAX 帖子,然后延迟并继续原始操作
- 我想要“鼠标滚轮事件延迟”
- 使用Facebook's EventEmitter是一种让延迟侦听器接收已经发出的事件的方法
- 带有标签的外部链接会延迟滚动事件
- 如何在JavaScript中测量交互和mousedown事件之间的延迟
- 鼠标输入事件上的jQuery延迟出现问题
- Javascript延迟事件
- 延迟后JS setTimeout获取事件
- 延迟开启(“点击”)事件
- 链接一系列具有中间延迟的javascript事件
- 如何将隐藏/显示事件延迟到提交后Iframe加载
- jQuery函数:为什么第一个事件的完成延迟到第二个事件完成
- 如何使用jQuery延迟事件传播
- 延迟事件侦听器
- 如何在jQuery中延迟事件
- 如何触发自定义延迟事件
- 使用setTimeout()来延迟事件