【问题标题】:JavaScript not functioning correctly in JSReportJavaScript 在 JSReport 中无法正常运行
【发布时间】:2016-02-17 21:43:05
【问题描述】:

尝试使用左侧菜单中的脚本部分在 jsreport 中使用 document.getElementById(),但它会报告回来

发生错误 - 呈现报告期间出错:文档未定义

什么给了?这是针对特定 ID 的简单 JavaScript。

【问题讨论】:

  • 我们可以看看一些代码吗?
  • document.getElementById("#showUpdatedRecordsFalse").style.visibility = "false";
  • 还尝试在渲染器中使用 jQuery,例如:$("#showUpdatedRecordsFalse").css( "visibility", "false" );
  • 你是如何定位 id 的?您已经定位了整个文档。另外,是在报告本身还是在脚本文件中?尝试在脚本文件中使用 jQuery,它不喜欢它。
  • 不担心定位 ID,因为您目前无法获取文档对象,因此任何获取 ID 的尝试都会失败。而且我说得太早了,$(document) 确实不适合我。

标签: javascript jsreport


【解决方案1】:

问题与异步有关。 document.getElementById 必须在构建您要定位的元素之后。因此,将脚本放在页面底部可以解决问题。

【讨论】:

    【解决方案2】:

    作为报告生成请求的一部分而不是嵌入到模板中的脚本不包含由浏览器生成的文档或任何其他对象。

    如果您尝试使用 Javascript 修改文档,则几乎可以肯定您做错了什么。它并不意味着生成交互式内容,因此您的模板和数据应该在您发送请求时已经修复。您可能可以使用 require.js 解决这个问题,但您为什么要这样做?如果您真的要生成报告,则可以在请求输出之前提前做好所有事情。

    【讨论】:

    • 是的,Jan 解释了这一点。这就是 JavaScript 需要内联的原因。
    • 但实际上,您不必将任何 Javascript 内联,因为该工具旨在与固定数据和模板一起使用。包含脚本用于格式化数字(您可以提前完成)和创建图表和其他图形(您可以提前完成)。您应该退后一步,问问自己为什么要在报告中操作 DOM,而不是在请求生成报告之前更改模板或数据。
    • 以编程方式,如果没有数据可以填充特定的 div,我将隐藏 div。报告是动态的,数据也是动态的。如果没有数据,我想显示一个表示没有数据的 div,否则我想显示一个正确格式化数据的 div。这必须在 JavaScript 中完成,除非我遗漏了什么。
    • 您可以使用 jsreport 内置的模板引擎轻松完成此操作。例如,{{if foo.length === 0}}<content></content>{{/if}} {{if foo.length !== 0}}<othercontent></othercontent>{{/if}}
    • 没有意识到这一点。我的 JavaScript 可以工作,但这是更少的代码。一定要试一试。
    猜你喜欢
    • 1970-01-01
    • 2021-02-13
    • 2019-11-11
    • 1970-01-01
    • 1970-01-01
    • 2020-08-07
    • 2021-02-09
    • 1970-01-01
    • 2010-10-31
    相关资源
    最近更新 更多