在IE10中导航回页面时,孤立的jQuery Datepicker重新出现

时间:2013-10-03 13:53:58

标签: jquery jquery-ui internet-explorer internet-explorer-10 jquery-ui-datepicker

此问题与Internet Explorer 10有关,这是我正在测试的,并不会影响我当前版本的Firefox or Chrome

在Internet Explorer中重现的步骤

  1. 导航至:http://jqueryui.com/datepicker/
  2. 点击日期字段以显示datepicker
  3. 当它打开时,导航到IE窗口旁边的另一个应用程序窗口,然后返回IE,然后点击datepicker面板中的一些空白空格。
  4. 你应该看到datepicker消失然后重新出现,我认为这必须与最后一次拥有焦点的控件相关,当你点击后重新获得焦点。
  5. 我注意到了什么:

    • 如果您最小化并最大化IE,则不会发生
    • 如果您执行相同的步骤而不点击其他应用程序并直接点击空格,则不会发生
    • 如果您并排或在2台显示器上安装Windows /应用程序,它可以保持一致

    虽然我可以接受这是一个小问题而且看起来并不像是一个错误,但在我们的应用程序中,datepicker作为弹出窗口的一部分显示出来的问题变得更加严重。点击它后消失。

    使用父容器的日期选择器:

    date picker with container

    孤立日期选择器重新出现:

    orphaned date picker

    我尝试过的事情:

    我已经看过与datepicker的可见度相关的帖子,这些帖子表明了以下内容,我已经测试过:

    $("#my-datepicker-div").datepicker('destroy');
    $("#my-datepicker-div").datepicker('disable');
    

    即使我很高兴忽略这种边缘情况,但它仍然被提出作为我需要修复的错误。我还不确定还有什么可以尝试。

1 个答案:

答案 0 :(得分:4)

我能够在IE 10中修复(让它刷新然后关闭,因此有一点闪烁)通过调用:

$("#datepicker").datepicker("hide");
在div关闭时调用的函数(在这个快速示例中,在返回窗口时单击div的一侧)。例如:http://jsfiddle.net/anyuG/

要重现您为IE 10描述的行为,只需在disablepopup()函数中注释掉该行,您就可以重现孤立的日期选择器窗口。如果您将实际示例发布为小提琴,我们可以使用它。

在这里抓住弹出式div示例:http://istockphp.com/jquery/creating-popup-div-with-jquery/

<强>更新

另一种处理此问题的方法,看起来更好一点是让用户成为$(window).blur()$(window).focus()函数。在我看来,这看起来没问题,请注意窗口关闭,如果你在白框内点击则重新打开,如果你在白框外面点击,那么所有人都会一起关闭:

$(window).blur(function(e) {
    $("#datepicker").datepicker("hide");
});

更新了小提琴。与.focus()一起玩也可以根据自己的喜好确定最佳组合,你应该做得很好。也可能只想检测IE 10,并且只在该浏览器中运行此代码。

小提琴:http://jsfiddle.net/78252/1/