繁体   English   中英

当我关闭打开的窗口时,JQwidgets滚动在chrome上不起作用

[英]JQwidgets scroll doesn't work on chrome when i close opened window

我使用JQwidgets ,我用打印数据onclick print-button作为代码:

$("#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();
});

当我关闭打印寡妇(不继续打印)时,我无法使用网格滚动(在chrome上 )..

google-chrome版本34.0.1847.131 m

这在Firefox和IE上运行良好..

如何在关闭chrome上的打印窗口后修复滚动

小提琴,演示

看起来你不是唯一有这个问题的人

我知道您的代码已经设置好了,并且您希望使用自己拥有的内容运行,但除非有人提出黑客或谷歌决定修复明显的错误,我认为您需要重新思考如何接近这个问题。

如果无格式窗口是一个选项,或者如果打印对话是一个模态,那么您可以使用当前策略将其拉出来,但Chrome中没有这些选项。 即使你能够解决这个滚动问题,你仍然会留下一个不太理想的UX问题,因为如果用户在打印对话框中点击“取消”,那么它们将留下一个仍然打开的空白窗口。

这是一个JS小提琴,用来演示你需要改变你的方法: DEMO你可以从这个演示中看到,即使我们在新窗口中运行一个完全独立的脚本,通过在内容对象中将其作为纯文本传递,它仍然会导致同样的问题。 这对我来说意味着这是一种父/子类型的关系,不容易用JS来规避。

我推荐2种可能的解决方案:


选项1:
 <input type="button" value="Print" onclick="window.print(); return false;" /> 

这会触发无法从“Windows关闭按钮”关闭的​​全屏打印对话框。 这样你就可以一起避免这个问题。 然后,您可以使用JS和打印样式的组合来定位和隔离要打印的信息。 我知道这是更多的工作,但我认为可能是更好的跨平台解决方案。

这个选项本质上更具有蛮力和简单性(你已经评论过你知道这一点,但是我将它放弃,因为它仍然是一个选项)。

DEMO


选项2:
  1. 用户单击打开新选项卡/窗口的链接/按钮
  2. 在同一个函数中,表中的数据被加载到JSON对象中
  3. JSON对象将加载到新选项卡/窗口中的打印模板中
  4. 模板启动打印功能

通过采取这些操作,我认为您将足够解释JS实例,新选项卡不会影响启动脚本。

这是一个浏览器错误 - 你必须找到一些修复它的黑客。

听起来好像不想将打印对话框代码放在其他地方,因此不会影响滚动条。 这是显而易见的解决方案,但听起来你不能这样做。

这就是我要做的事情:等到有人触发了有问题的情况,然后在滚动事件上放置一个事件监听器。 当它发生时...继续并重新加载页面。

简单,轻松,有趣。

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'
});

看看jsfiddle: http//jsfiddle.net/8PtUX/6/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM