Javascript 防止jQuery Mobile弹出窗口上的双击关闭行为
我正在使用jQuery Mobile在信息图像按钮附近创建一个弹出窗口(见下图)。我正在创建的弹出窗口将Javascript 防止jQuery Mobile弹出窗口上的双击关闭行为,javascript,jquery,jquery-mobile,popup,double-click,Javascript,Jquery,Jquery Mobile,Popup,Double Click,我正在使用jQuery Mobile在信息图像按钮附近创建一个弹出窗口(见下图)。我正在创建的弹出窗口将数据可解除设置为false。红色突出显示了jQuery Mobile创建的容器 如果用户在i图标上点击一次,它就可以正常工作。弹出窗口打开,并调用popupafteropen事件。要解除它,用户可以点击(单击)i或红色区域外(感谢数据解除值)。相反,如果用户执行双击(这里我的意思是两次点击之间的延迟非常短),弹出窗口将打开,popupafteropen将被调用,但随后也将调用close(由于
数据可解除
设置为false
。红色突出显示了jQuery Mobile创建的容器
如果用户在i图标上点击一次,它就可以正常工作。弹出窗口打开,并调用popupafteropen
事件。要解除它,用户可以点击(单击)i或红色区域外(感谢数据解除
值)。相反,如果用户执行双击(这里我的意思是两次点击之间的延迟非常短),弹出窗口将打开,popupafteropen
将被调用,但随后也将调用close
(由于第二次点击和数据可解除
值)。总体结果是弹出窗口未显示
有什么解决办法吗?我的目标是防止第二次点击,以便正确显示弹出窗口
谢谢。如果弹出窗口已经打开,您可以处理事件并忽略它。比如:
if ($.mobile.activePage.find("#popupID").is(":visible") {
// Do something here if the popup is open
}
Kazekage Gaara有一个好主意,所以先看看 另一个要求您将doubletap事件绑定到弹出窗口打开图标并阻止默认操作,不幸的是,jQuery Mobile不支持doubletap,因此您可以使用此插件:
(function($) {
$.fn.doubleTap = function(doubleTapCallback) {
return this.each(function(){
var elm = this;
var lastTap = 0;
$(elm).bind('vmousedown', function (e) {
var now = (new Date()).valueOf();
var diff = (now - lastTap);
lastTap = now ;
if (diff < 250) {
if($.isFunction( doubleTapCallback ))
{
doubleTapCallback.call(elm);
}
}
});
});
}
})(jQuery);
过去有更简单的解决方案,jquerymobile过去有mobileinit配置参数,允许您设置tap事件可以持续多长时间
或者,您可以监视轻触之间的间隔,并防止允许操作,如下所示:
$(".icon").doubleTap(function(event){
event.preventDefault();
});
var lastTapTime;
function isJqmGhostClick(event) {
var currTapTime = new Date().getTime();
if(lastTapTime == null || currTapTime > (lastTapTime + 800)) {
lastTapTime = currTapTime;
return false;
}
else {
return true;
}
}
我错过了一些东西。。。以前有更简单的解决方案,jQUery Mobile过去有一个mobileinit配置参数,允许您设置点击事件可以持续多长时间。较旧版本的jQUery Mobile有一个配置参数(通过mobileinit),您可以使用该参数设置点击事件触发前按下屏幕的时间。所以你可以把1秒以内的所有东西都设为自来水。我刚刚意识到这对你毫无帮助,你的案子仍然会触发两次DI甚至没有考虑FastClick,它没有做任何事情。你能创建一个简单的JSFIDLE示例吗,只是图标和弹出窗口?很抱歉耽搁了。举个例子有点复杂。由于轻敲时也有问题(轻敲并不总是被捕获),我认为主干事件委托机制可能是问题所在。我会试着做一些测试。