Javascript 防止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(由于

我正在使用jQuery Mobile在信息图像按钮附近创建一个弹出窗口(见下图)。我正在创建的弹出窗口将
数据可解除
设置为
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示例吗,只是图标和弹出窗口?很抱歉耽搁了。举个例子有点复杂。由于轻敲时也有问题(轻敲并不总是被捕获),我认为主干事件委托机制可能是问题所在。我会试着做一些测试。