javascript - 函数完成后jQuery mobile执行转换

时间:2013-04-23 00:58:13

标签: javascript jquery-mobile

我目前正在使用当前的html用于jQuery Mobile页面转换:

<a href="#page2" data-role="button" data-transition="flip" onclick="save()">page2</a>

这里的save()功能可以将canvas保存在当前页面上。

然而,似乎save()函数与页面转换一起异步运行,因此有时页面转换没有设法完全保存我想要的信息。

有没有办法在jQuery Mobile执行页面转换之前完全完成一个函数?

- 的更新 -

这是一个jsFiddle示例供所有人玩:

http://jsfiddle.net/nMR85/1291/

(注意pagebeforechange在控制台中的save trigger之前触发

1 个答案:

答案 0 :(得分:1)

尝试使用此解决方案:

var transition = false;

function save() {

    if(!transition) {
        var callback = function() {
            transition = true;
            $("a").click();
        };

        // your aynchronous code which will trigger callback after it finishes executing

        return false;
    }
    else {
        transition = false;
    }
}

首次执行此函数不会触发转换(return false阻止执行附加的每个下一个事件处理程序)。第二次执行会,但不会触发发送。当然,将transition变量放入全局上下文并不是一个好习惯,但它只是一个想法,你可以如何应对这个问题。

另外我认为在onclick(用HTML)中你应该有return save()


根据提供的FIDDLE进行编辑:

玩小提琴我稍微改变了a元素:

<a id="goto_trigger" href="#p2" data-role="button" onclick="return save()">Go To Page 2 with return</a>

此外,脚本应如下所示:

$(document).bind('pagebeforechange', function(e, data) {
    console.log("pagebeforechange");
});

var transition = false;

function save() {
    if(!transition) {
        setTimeout(function(){
            alert("save trigger");
            transition = true;
            $("#goto_trigger").click();
        },3000);
        return false;
    }
};

现在它按预期工作。