【问题标题】:Write ejs variable in jQuery在 jQuery 中编写 ejs 变量
【发布时间】:2019-10-26 04:31:22
【问题描述】:

我正在使用 jQuery 将一些 html 附加到 div

public/js/writeInputs.js

$("#myDiv").append("<input type='search' value='<%= filters.title %>' name='filters[title]' class='form-control'>")

在这种情况下,filters 是我从我的 node express 后端传递的一个对象,我想在我的输入中显示它的值。但是,上面将ejs 变量呈现为字符串文字:

<%= filters.title %>

如果我将此值硬编码到 html 中,它会按预期工作:

views/partials/inputs.ejs

<input type="search" name="filters[title]" value="<%= filters.title %>" class="form-control">

如何在 jQuery 中编写 ejs 变量?

我已经在我的附录中尝试了这些方法,但都没有奏效:

value="<%= filters.title %>"
value=${<%= filters.title %>}
value='"<%= filters.title %>"'

【问题讨论】:

  • 你的代码是ejs文件还是普通js文件?
  • append 出现在 js 文件中,但它出现的元素是 ejs 模板
  • 您是否记得要确保writeInputs.js 不会从您的公共目录中获取静态资产,而是具有自己的 GET 路由功能,以便您的服务器可以加载在文件中并使用respond.render(...)回复?
  • 看看this answer。您可以在浏览器中使用 ejs 值声明该变量,它将可用于 jquery。
  • 您正在使用服务器以使用 ejs 语法呈现页面。任何具有 ejs 语法的文件都需要以这种方式提供服务,它们不能只是放在静态/公共目录中并由用户直接从该文件加载。 writeInputs.js 的 URL 请求需要转到实际的服务路线(如 app.get('writeInputs.js', ...),如果您使用的是 express),并且如果您希望您的 ejs 语法被替换,您必须使用 ejs 渲染.

标签: javascript jquery node.js ejs


【解决方案1】:

只有你的views文件夹中的ejs文件是从服务器渲染的,所以你必须在那个文件中创建变量。这是一个例子:

view.ejs

<script>
    var ejsVal = <%= val %>; // You have to use var to make it global
</script>
<script src="script.js"></script>

script.js

console.log(ejsVal);

【讨论】:

  • 您必须在 QUOTES 中编写您的 ejs 语法,例如 ""
【解决方案2】:

Node express 首先渲染 HTML,然后浏览器根据 HTML 做一些请求来获取脚本、图像等。因此 &lt;%= filters.title %&gt; 不会被 EJS 解释。

作为替代方案,将一些数据渲染成 HTML 并重写 JavaScript 以从 HTML 中读取 filters.title,如下所示:

<input type="hidden" id="filter" value="<%= filters.title %>" />

<script src="yourScript.js"></script>

yourScript.js

    var filter = document.getElementById("filter").value;
    $("#myDiv").append("<input type='search' value='" + filter + "' name='filters[title]' class='form-control'>");

【讨论】:

    【解决方案3】:

    你可以这样试试吗?

    var temp = <%= test  %>;
    $("#myDiv").append("<input type='search' value='"+temp+"' name='filters[title]' class='form-control'>");
    

    【讨论】:

    • 谢谢,但它仍然被呈现为字符串文字:"&lt;%= filters.title %&gt;"
    • @fugu 改了可以试试这个
    • 但是&lt;%= test %&gt; 在我的.js 文件中不可用
    • 抱歉把过滤值放在那里
    猜你喜欢
    • 2019-08-28
    • 2020-08-12
    • 1970-01-01
    • 2018-11-08
    • 2020-12-21
    • 2020-01-18
    • 2017-08-20
    • 2020-04-15
    • 1970-01-01
    相关资源
    最近更新 更多