JQM IOS:在更新到JQM 1.3.1之后,使用setInterval()changePage()不再有效

时间:2013-05-08 06:42:03

标签: jquery-mobile ios6 jquery-1.9

我们创建可在本地教室网络上运行的分布式iPod Touch应用程序。我们的一个应用程序有一个控制器,允许学生在教室前面的共享显示器上放满图标。

如果学生按下手指,控制器会使用setInterval()重复移动图标。如果图标命中类显示上的对象,则服务器会向应用程序发送消息以更改为其他页面。所有这些都在使用JQM 1.0.2直到我们的iPod更新。我们对PhoneGap,JQ JQM进行了重大更新。 IOS 6.1.3,我们切换到JQM 1.3.1。我们过去使用了live()事件函数并取得了成功。现在我们在on()上遇到了麻烦。

我会尽力在这里显示代码:

这部分工作正常:

// Handles controller direction events to move icon on shared display
$(document).on('vmouseup vmousedown', ".controller", function(event){
    var evType, direction;
    evType = event.type;
    event.preventDefault();
    direction = $(this).attr("data");

    if (repeater != 0){clearInterval(repeater)};
    repeater = 0;
    if(evType == 'vmousedown'){
        move(direction);
        repeater = setInterval(function(){move(direction)},200);
    } else {
        clearInterval(repeater);
        repeater = 0;
    }
});

此部分冻结IOS设备上的捕获页面(具有控制器)(在OSX上的Safari浏览器中正常工作)。我们想要改变页面(“#open”):

    // Handles message from the server that an object was captured
    function handleOperations(fields) {
        var tag = fields.tag;
        var message = fields.content.value;
        switch (tag) {
            case 'collective' :
                expression = message;
                $(".group-expression").html(expression);
                break;
            case 'capture' :
                term = message;
                $(".captured-expression").html(message);
                $.mobile.changePage("#operate");
                break;
        case 'flags' :
                updateOps(message);
        break;
        }
    }

这些案件中的每一个都涉及中断正在发生的事情。我们过去使用live()来处理这种事情,这在我们的工作中经常发生。服务器通常会中断客户端正在做的事情。我们如何获得live()功能?

更新

如果在changePage()之前插入一个alert(),它就可以工作。会不会有任何想法。现在很困惑。我们不能不断发出警报。

1 个答案:

答案 0 :(得分:1)

使用setTimeout()修复了问题这是代码。

setTimeout(function() {
    switch (tag) {
        case 'collective' :
            expression = message;
            $(".group-expression").html(expression);
            break;
        case 'capture' :
            term = message;
            $(".captured-expression").html(message);
            $.mobile.changePage("#operate");
            break;
        case 'flags' :
            updateOps(message);
    break;
    }
}, 0);