【问题标题】:Javascript double-click does not work in IE9 and IE11javascript 双击在 IE9 和 IE11 中不起作用
【发布时间】:2015-03-23 08:32:24
【问题描述】:

在我的 javascript 代码中,单击在新选项卡中打开链接,然后双击打开灯箱。它适用于除 IE9 和 IE11 之外的所有浏览器。 在我的第一个代码中,单击和双击都可以工作,但单击时,IE 会给出消息“允许弹出窗口?”我希望 IE 像其他浏览器一样在没有消息的新选项卡中打开链接。 在我的第二个代码中,单击按我的意愿工作,但在 IE 中双击的第二次单击被忽略并最终作为单击工作。可以做些什么来消除我可能遗漏的问题 - 无论是在第一个代码中还是在第二个代码中?

第一个代码:

                       $('div[id^="jzl_"].short').click(function(e) {
                              var $this = $(this);
                              var currentID = e.target.id;

                              if ($this.hasClass('clicked')) {
                                     $this.removeClass('clicked');
                                     $.colorbox({
                                            href : "getInfo1.php?id=" + currentID,
                                            overlayClose : false,
                                            top : "16%"
                                     });
                                     //$.colorbox({ overlayClose: false });
                                     //alert("Double click");
                                     //here is your code for double click
                              } else {
                                     $this.addClass('clicked');
                                     setTimeout(function() {
                                            if ($this.hasClass('clicked')) {
                                                   $this.removeClass('clicked');
                                                   //                                 alert("Just one click!");
                                                   var jobSite = window.open('', '_blank');
                                                   sleep(1000);
                                                   var redirct = getPage(currentID);
                                                   sleep(1000);
                                                   jobSite.location = redirct;
                                                   //var redirct = getPage(currentID);
                                                   //window.open(redirct, '_newtab' + Math.floor(Math.random() * 999999));
                                            }
                                     }, 500);
                              }
                       });

第二个代码:

                       $('div[id^="jzl_"].short').click(function(e) {
                              var $this = $(this);
                              var currentID = e.target.id;
                              var jobSite = window.open('', '_blank');
                              if ($this.hasClass('clicked')) {
                                     $this.removeClass('clicked');
                                     $.colorbox({
                                            href : "getInfo1.php?id=" + currentID,
                                            overlayClose : false,
                                            top : "16%"
                                     });
                                     //$.colorbox({ overlayClose: false });
                                     //alert("Double click");
                                     //here is your code for double click
                              } else {
                                     $this.addClass('clicked');
                                     setTimeout(function() {
                                            if ($this.hasClass('clicked')) {
                                                   $this.removeClass('clicked');
                                                   //                                 alert("Just one click!");
                                                   var redirct = getPage(currentID);
                                                   jobSite.location = redirct;
                                                   //var redirct = getPage(currentID);
                                                   //window.open(redirct, '_newtab' + Math.floor(Math.random() * 999999));
                                            }
                                     }, 500);
                              }
                       });

【问题讨论】:

    标签: javascript html css ajax double-click


    【解决方案1】:

    您应该同时使用 .click() 和 .dblclick() 而不是测试元素是否具有 clicked 类。所以这是新代码:

    $('div[id^="jzl_"].short').dblclick(function(e) {
    
    var $this = $(this);
    var currentID = e.target.id;
    
    $.colorbox({
    href : "getInfo1.php?id=" + currentID,
    overlayClose : false,
    top : "16%"
    });
    
    //$.colorbox({ overlayClose: false });
    //alert("Double click");
    //here is your code for double click
    
    });
    
    
    
    $('div[id^="jzl_"].short').click(function(e) {
    
     var $this = $(this);
     var currentID = e.target.id;
    
     var jobSite = window.open('', '_blank');
     var redirct = getPage(currentID);
    jobSite.location = redirct;
    
    //var redirct = getPage(currentID);
    //window.open(redirct, '_newtab' + Math.floor(Math.random() * 999999));
    
    });
    

    【讨论】:

    • Ola,代码中的 dbl-click 最终不仅在 IE 中,而且在 FF 和 Chrome 中都可以单击。
    【解决方案2】:

    这个解决方案应该有效:

    var t = []; //timeout array
    $('div[id^="jzl_"].short')
        .on('click', function(e) {
            var $this = $(this),
                currentID = e.target.id;
    
            // put each click in timeout array
            t[t.length] = setTimeout(function() {
                t = []; //reset timeout array
                alert('clicked: ' + currentID);
    
                //your code here
    
            }, 500);
        })
        .on('dblclick', function (e) {
    
            //cancel 2 timeouts and reset timeout array
            clearTimeout(t[0]);
            clearTimeout(t[1]);
            t = [];
    
            var $this = $(this),
                currentID = e.target.id;
    
            window.open('http://google.com', '_blank');
        });
    

    http://jsfiddle.net/tvL07phr/2/的演示

    【讨论】:

    • 你切换了click to open alertdblclick to open url in new tab。我将它切换回click to open url in new tabdblclick to open alert,它最终给出了与我的第一个代码相同的结果。如果您愿意,我可以在您的代码下方发布我的代码。
    • 是的。事实上,如果你在 IE9 或 IE11 中运行你的小提琴,单击将调用 IE 消息“允许弹出?”而不是在新标签页中打开 google.com。
    • 但是 click/dblclick 逻辑有效,对吧?除了 IE 由于 setTimeout 显示允许弹出提示。当弹出窗口不是由用户事件触发时,会调用弹出窗口阻止程序。从技术上讲,弹出窗口是由用户事件触发的(在我们的例子中是单击),但不知何故,对于 IE,用户事件触发器由于 setTimeout 而丢失。我会找到解决方案的。
    • 我试图找到一种方法来阻止 IE 弹出窗口阻止程序阻止 setTimeout 内的单击事件而没有成功。我研究了 MSDN (msdn.microsoft.com/en-us/library/ms537632(v=vs.85).aspx),发现“如果在点击事件中使用 setTimeout() 方法,则不会启动弹出窗口。”所以你去吧,没有办法绕过它。为什么不像我最初建议的那样颠倒逻辑 - 在 dblclick 事件上打开弹出窗口并在 click 事件上执行另一个?在 dblclick 事件上打开弹出窗口不会被阻止,因为它不在 setTimeout 内。
    • 是的,我需要的是当点击在新标签中打开url时,IE不应该显示允许弹出提示。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多