我的Freemarker模板中包含以下代码:

<form>
  <#list elements as product>
    <input id="${product.buyLink}" type="checkbox" onClick="addToCart()" /><#if product.title??>${product.title}</#if> - <#if product.price??>${package.price}<#else>missing price</#if><br />
    <script src="/assets/js/addToCart.js" type="text/javascript"></script>
  </#list>
</form>


我的addToCart.js看起来像这样:

function addToCart() {
   if (document.getElementById("${product.buyLink}").checked == true) {
        console.log("Product removed from cart.")
   } else {
        console.log("Product addded into cart.")
   }
}


当我运行此代码时,Chrome开发人员工具会继续显示以下错误消息:

Uncaught TypeError: Cannot read property 'checked' of null


我也认为我的变量${product.buyLink}是一个包含许多反冲的字符串-例如,它看起来像这样:"db/45493/t/524s"。我还尝试在我的JS脚本的顶部console.log("${package.buyLink}");并返回${package.buyLink}

因此,tt似乎我的JS脚本根本不知道${product.buyLink}或认为它等于null。错误到底在哪里,我在做什么错?

最佳答案

JavaScript在客户端上运行,FreeMarker在服务器上运行。
这是一个例子:
javascript - JS无法识别Freemarker变量-LMLPHP

如您所见,Internet将您的JavaScript代码与${product.buyLink}分开,这由服务器上的FreeMarker处理。您需要从FreeMarker模板的<script>标记内的addToCart.js中移动代码,或者从addToCart.js创建新模板并处理该模板,然后再将其返回到浏览器。

为了确保一切都清楚,您的目标是在服务器上处理${product.buyLink},在您的浏览器中运行的JavaScript必须已经包含db/45493/t/524s,JavaScript在您的浏览器中运行并且不知道${product.buyLink}是什么。

关于javascript - JS无法识别Freemarker变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45765435/

10-12 06:35