Ios jquerymobile+;Cordova-on“;轻敲;警报打了两次
jQM 1.3、Cordova、iOS 每次触发tap事件且该事件调用的函数包含一个Ios jquerymobile+;Cordova-on“;轻敲;警报打了两次,ios,jquery-mobile,cordova,Ios,Jquery Mobile,Cordova,jQM 1.3、Cordova、iOS 每次触发tap事件且该事件调用的函数包含一个警报,它都会被调用两次 在这里,这将调用一个警报,当我按“OK”并尝试点击/滚动应用程序上的任何其他位置时,将显示第二个警报: $(document).on('tap', '#mydiv', function(event) { event.preventDefault(); alert('Tapped.'); return false; }); 如果我这样做,#result将只包含“Tappe
警报
,它都会被调用两次
在这里,这将调用一个警报
,当我按“OK”并尝试点击/滚动应用程序上的任何其他位置时,将显示第二个警报
:
$(document).on('tap', '#mydiv', function(event) {
event.preventDefault();
alert('Tapped.');
return false;
});
如果我这样做,#result
将只包含“Tapped”,它应该是什么样子的
$(document).on('tap', '#mydiv', function(event) {
event.preventDefault();
$('#result').append('Tapped');
return false;
});
我真的不需要警报
。只是为了调试。
然而,我很好奇为什么会发生这种行为。
为什么呢如何修复它?
谢谢。您的代码有问题。如果您单击按钮多次,它将执行多次。为什么?因为一旦你们点击按钮,事件点击将执行1,下一次点击它将执行上一次的1+1事件点击,如此类推,若你们多次点击。。。 防止多次事件火灾的解决方案:
1.使用off()或一个: 2.使用标志
var flag = true
if( flag ){
flag = false;
$(document).on('tap', '#mydiv', function(event) {
event.preventDefault();
alert('Tapped.');
return false;
});
}
您的代码有问题。如果您单击按钮多次,它将执行多次。为什么?因为一旦你们点击按钮,事件点击将执行1,下一次点击它将执行上一次的1+1事件点击,如此类推,若你们多次点击。。。 防止多次事件火灾的解决方案:
1.使用off()或一个: 2.使用标志
var flag = true
if( flag ){
flag = false;
$(document).on('tap', '#mydiv', function(event) {
event.preventDefault();
alert('Tapped.');
return false;
});
}
我也遇到了同样的问题,解决方法是将警报包装到setTimeout中
setTimeout('alert("Tapped.")',250);
这可能与之前提到的问题相同,他们得出的结论是这是一个浏览器错误
基本上,如果您从touchend事件触发模式警报或提示,则单击警报/提示按钮会触发另一个touchstart事件,该事件的目标是触发原始触摸事件的同一元素,即使在警报/提示附近看不到该事件。奇怪的是,在你的手指抬起后,没有匹配的touchend被发送……我假设这与以下事实有关:警报是模态的,浏览器仍在处理触发touchend/tap/vclick和回调的原始touchend事件
令人不安的是,下次你触摸屏幕时
显然,浏览器最终会刷新来自浏览器的touchend事件
警告/立即解雇,并且该事件再次针对同一目标
元素,即使您的手指不在任何位置
在元素附近。这就是为什么回调看起来很简单的原因
开火两次
我也遇到了同样的问题,解决方法是将警报包装到setTimeout中
setTimeout('alert("Tapped.")',250);
这可能与之前提到的问题相同,他们得出的结论是这是一个浏览器错误
基本上,如果您从touchend事件触发模式警报或提示,则单击警报/提示按钮会触发另一个touchstart事件,该事件的目标是触发原始触摸事件的同一元素,即使在警报/提示附近看不到该事件。奇怪的是,在你的手指抬起后,没有匹配的touchend被发送……我假设这与以下事实有关:警报是模态的,浏览器仍在处理触发touchend/tap/vclick和回调的原始touchend事件
令人不安的是,下次你触摸屏幕时
显然,浏览器最终会刷新来自浏览器的touchend事件
警告/立即解雇,并且该事件再次针对同一目标
元素,即使您的手指不在任何位置
在元素附近。这就是为什么回调看起来很简单的原因
开火两次
我想补充一点:
在尝试了所有可能的避免传播的方法后,我得出结论,问题与传播无关,唯一可行的解决方案是Yuriy的,它对我有效,即使延迟更短(50) Console.log的作用方式相同吗?您是否将这些事件绑定到任何页面事件?尚未尝试console,因为我需要添加插件,之后总是忘记删除它。不,即使我只在
中放置了点击事件而没有任何其他内容,它也会被触发两次。请尝试touchstart
事件。@Omartouchstart
有效。警报只有一次。但我注意到在关闭警报后,滚动被“捕获”,页面总是需要两次按下才能再次滚动(第一次滚动被“忽略”)。删除preventDefault()
并重新运行false
。您也可以使用vclick
,单击
和触摸端
。Console.log的作用方式相同吗?您是否将这些事件绑定到任何页面事件?尚未尝试console,因为我需要添加插件,之后总是忘记删除它。不,即使我只在
中放置了点击事件而没有任何其他内容,它也会被触发两次。请尝试touchstart
事件。@Omartouchstart
有效。警报只有一次。但我注意到在关闭警报后,滚动被“捕获”,页面总是需要两次按下才能再次滚动(第一次滚动被“忽略”)。删除preventDefault()
并重新运行false
。您也可以使用vclick
,单击
和触摸端