我有一个较旧的代码库,其中一个冗长的进程的最后一页有一个结果页面,有一些手风琴式的控件,并且"打印这个"按钮,打开同一报告的打印机友好版本。当打印机友好页面打开时,它会自动显示打印对话框。
对话框打开后,在新标签页中,如果用户使用Chrome,则用户可以切换回原始标签页,但切换按钮不再有效。 jQuery hide
和show
函数也不再起作用。相反,他们似乎排队,但延迟了。一旦用户切换回子选项卡,并关闭打印对话框或关闭选项卡,则所有切换,隐藏和显示功能调用都以背对背的方式进行。
这可能看起来像一个边缘情况,但我需要知道是否有办法阻止子窗口阻止父窗口中的功能,禁用控件直到打印对话框关闭,或禁用控件直到子选项卡关闭。
以下是演示此问题的示例代码:
<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>
答案 0 :(得分:1)
据我所知,在搜索后,这是Chrome的一个错误,使用setTimeout
和toggle
屏蔽了所有代码。 setInterval
的动画使用.toggle
,因此被阻止。
有几种方法可以解决此问题:
// 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();
}
,不使用动画。禁用主页上的按钮,通过添加以下代码,可选择显示一条消息,告诉用户此页面在关闭打印对话框之前无效:
{{1}}