Javascript JQwidgets滚动不';当我关上打开的窗户时,我不能在铬上工作
我使用,,我使用点击打印按钮打印数据 作为代码:Javascript JQwidgets滚动不';当我关上打开的窗户时,我不能在铬上工作,javascript,jquery,css,google-chrome,jqwidget,Javascript,Jquery,Css,Google Chrome,Jqwidget,我使用,,我使用点击打印按钮打印数据 作为代码: $("#print").click(function () { var gridContent = $("#jqxgrid").jqxGrid('exportdata', 'html'); var newWindow = window.open('', '', 'width=800, height=500'), document = newWindow.document.open(), pageConten
$("#print").click(function () {
var gridContent = $("#jqxgrid").jqxGrid('exportdata', 'html');
var newWindow = window.open('', '', 'width=800, height=500'),
document = newWindow.document.open(),
pageContent =
'<!DOCTYPE html>\n' +
'<html>\n' +
'<head>\n' +
'<meta charset="utf-8" />\n' +
'<title>jQWidgets Grid</title>\n' +
'</head>\n' +
'<body>\n' + gridContent + '\n</body>\n</html>';
document.write(pageContent);
document.close();
newWindow.print();
});
$(“#打印”)。单击(函数(){
var gridContent=$(“#jqxgrid”).jqxgrid('exportdata','html');
var newWindow=window.open('','宽度=800,高度=500'),
document=newWindow.document.open(),
页面内容=
“\n”+
“\n”+
“\n”+
“\n”+
“jQWidgets网格\n”+
“\n”+
'\n'+gridContent+'\n\n';
文件。编写(页面内容);
document.close();
newWindow.print();
});
当我关闭打印窗口(不继续打印)时,我无法使用网格滚动(在chrome上)
谷歌浏览器版本34.0.1847.131 m
这在Firefox和IE上运行良好
如何在关闭chrome上的打印窗口后修复卷轴
看起来你不是唯一一个这样的人 我知道你的代码已经设置好了,你想用你拥有的运行,但是除非有人提出了一个黑客或者谷歌决定修复一个明显的bug,我认为你需要重新思考你是如何处理这个问题的 如果无铬窗口是一个选项,或者打印对话框是一个模式,那么你可以通过当前的策略实现这一点,但这两个选项在Chrome中都不可能实现。即使您能够以某种方式绕过这个滚动问题,您仍然会遇到一个不太理想的用户体验问题,即如果用户在打印对话框中点击“取消”,那么他们仍然会留下一个打开的空白窗口 下面是一个JS提琴,演示您需要改变方法: 您可以从这个演示中看到,即使我们在新窗口中以纯文本的形式在内容对象中传递一个完全独立的脚本,它仍然会导致相同的问题。这对我来说意味着这是一种父/子类型的关系,不容易用JS规避 我推荐两种可能的替代解决方案:
备选案文1:
这会触发无法通过“Windows关闭按钮”关闭的全屏打印对话框。这样,您就可以避免所有问题。然后,您可以使用JS和打印样式的组合来定位和隔离要打印的信息。我知道这需要更多的工作,但我认为可能是更好的跨平台解决方案
这个选项在本质上更野蛮、更简单(你已经说过你知道这一点,但我不说了,因为它仍然是一个选项)
备选案文2:
通过执行这些操作,我认为您已经足够解除了JS实例的关联,新选项卡将不会影响启动脚本 这是一个浏览器错误-你必须找到某种黑客来修复它 听起来您不想将打印对话框代码放在其他位置,因此不会影响滚动条。这是显而易见的解决方案,但听起来你不能这么做 我会这样做:等到有人触发了有问题的条件,然后在scroll事件上放置一个事件侦听器。当它发生的时候。。。继续并重新加载页面 简单,简单,有趣
var needToReload = false;
$("#print").click(function () {
... as you have
needToReload = navigator.userAgent.toLowerCase().indexOf('chrome') > -1;
}
$('#contentjqxgrid').scroll(function () {
if (needToReload) {
window.location.reload();
}
});
查看JSFIDLE:我正在使用chrome,它在调用打印函数前后(水平)滚动。@如果错误没有出现,请告诉我,,,仍在尝试修复此问题,我尝试使用chrome,打开/关闭打印对话框。我尝试了多种组合,滚动总是有效的,因为Chrome浏览器中有一个bug——当你打开一个新窗口时,它将使用与旧窗口相同的渲染器。但是,调用window.print会停止所有javascript,如果在关闭打印对话框之前关闭新窗口,则旧窗口的javascript仍会停止。与绑定/取消绑定或类似操作无关。如果在关闭窗口之前不关闭“打印”对话框,则会遇到问题。否则,您将不会,因为浏览器将知道打印对话框已关闭,并且将具有有效状态。我需要创建新窗口,因此我可以通过按问题要求构建窗口来更改已打开窗口的内容。您能否详细说明这一点?我不明白你想做什么。Ian的回答肯定有一定的道理-避免bug,因为bug就是bug。
var needToReload = false;
$("#print").click(function () {
... as you have
needToReload = navigator.userAgent.toLowerCase().indexOf('chrome') > -1;
}
$('#contentjqxgrid').scroll(function () {
if (needToReload) {
window.location.reload();
}
});
$("#jqxscrollbar").jqxScrollBar({
width: 5,
height:180,
theme:'energyblue',
vertical:true
});
$("#jqxscrollbar1").jqxScrollBar({
width: 300,
height:5,
theme:'energyblue'
});