我们创建可在本地教室网络上运行的分布式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(),它就可以工作。会不会有任何想法。现在很困惑。我们不能不断发出警报。
答案 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);