子窗口中的jQuery打开对话框可防止在主窗口中切换,隐藏或显示

时间:2016-11-30 14:47:45

标签: javascript jquery dom

我有一个较旧的代码库,其中一个冗长的进程的最后一页有一个结果页面,有一些手风琴式的控件,并且"打印这个"按钮,打开同一报告的打印机友好版本。当打印机友好页面打开时,它会自动显示打印对话框。

对话框打开后,在新标签页中,如果用户使用Chrome,则用户可以切换回原始标签页,但切换按钮不再有效。 jQuery hideshow函数也不再起作用。相反,他们似乎排队,但延迟了。一旦用户切换回子选项卡,并关闭打印对话框或关闭选项卡,则所有切换,隐藏和显示功能调用都以背对背的方式进行。

这可能看起来像一个边缘情况,但我需要知道是否有办法阻止子窗口阻止父窗口中的功能,禁用控件直到打印对话框关闭,或禁用控件直到子选项卡关闭。

以下是演示此问题的示例代码:

<html><head></head><body>

<!-- Accordion content below. -->
<div id="div1">
            Here is our content<br />
            to be displayed.<br />
            Part of the issue becomes<br />
            more apparent when<br />
            several lines are<br />
            present.<br />
            Lorem Ipsum...<br />
            Lorem Ipsum...<br />
            Lorem Ipsum...<br />
            Lorem Ipsum...<br />
</div>

<!-- Our collapse/hide button. Will not work when print dialog is open 
     in child tab. -->
<button id="btn1">Show/Hide Content</button>

<!-- Our print button -->
<div><a href="test.php?print=true" target="_blank">Print in New Tab</a></div>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script type="text/javascript">
    // When the button is clicked, show/hide content
    $('#btn1').on("click", function() {
        $('#div1').toggle("slow");
    });

    // Flag used to determine whether we print this page. Pretend that there 
    // is more print-unfriendly cruft that would be removed if this were the 
    // print-friendly page. 
    var do_print = false

    // if the ?print=true request variable has been appended to the url,
    // trigger javascript that brings up the print dialog.
    <?php if(isset($_REQUEST['print'])) :?>
        do_print=true;
    <?php endif ?>

    if( do_print==true ) {
        window.print();
    }

</script>
</body></html>

1 个答案:

答案 0 :(得分:1)

据我所知,在搜索后,这是Chrome的一个错误,使用setTimeouttoggle屏蔽了所有代码。 setInterval的动画使用.toggle,因此被阻止。 有几种方法可以解决此问题:

  1. 使用不带参数的// When the button is clicked, show/hide content $('#btn1').on("click", function() { $('#div1').toggle("slow"); }); window.disableBtns = function () { // Optionally show some warning message $('#btn1').attr('disabled', true) console.log('disable'); }; window.enableBtns = function () { $('#btn1').attr('disabled', false) console.log('enable'); }; // Flag used to determine whether we print this page. Pretend that there // is more print-unfriendly cruft that would be removed if this were the // print-friendly page. var do_print = false // if the ?print=true request variable has been appended to the url, // trigger javascript that brings up the print dialog. <?php if(isset($_REQUEST['print'])) :?> do_print=true; <?php endif ?> if( do_print==true ) { opener.disableBtns(); window.print(); opener.enableBtns(); } ,不使用动画。
  2. 禁用主页上的按钮,通过添加以下代码,可选择显示一条消息,告诉用户此页面在关闭打印对话框之前无效:

    {{1}}