1

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

如果学生按住手指,控制器会使用 setInterval() 重复移动图标。如果图标碰到类显示上的对象,服务器会向应用程序发送一条消息以切换到另一个页面。在我们的 iPod 更新之前,所有这些都在 JQM 1.0.2 中运行。我们对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 浏览器中工作正常)。我们要更改Page("#operate"):

    // 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() ,它就可以工作。将不胜感激任何想法。现在很迷茫。我们不能让警报不断弹出。

4

1 回答 1

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);
于 2013-05-13T17:30:42.047 回答