Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 有没有办法在ejs中的函数中添加算术运算符?_Javascript_Node.js_Express_Ejs - Fatal编程技术网

Javascript 有没有办法在ejs中的函数中添加算术运算符?

Javascript 有没有办法在ejs中的函数中添加算术运算符?,javascript,node.js,express,ejs,Javascript,Node.js,Express,Ejs,我正在使用ejs创建一个带有预订表单的express应用程序,并在其中添加功能。这是用来付款的 我有一个select标记,并将它的选定文本存储在一个变量中。控制台日志记录它给出了值,但在实际代码中使用它会给出一个错误,表示它未定义 我需要的是获取所选输入的值,例如2,并将其乘以tour.price金额,例如34000,因此总数将为68000,并放入addCommas金额中:$//总数应为68000,然后是addCommas函数,使其为68000 我尝试使用ejs的Scriptlet标记,并将此代

我正在使用ejs创建一个带有预订表单的express应用程序,并在其中添加功能。这是用来付款的

我有一个select标记,并将它的选定文本存储在一个变量中。控制台日志记录它给出了值,但在实际代码中使用它会给出一个错误,表示它未定义

我需要的是获取所选输入的值,例如2,并将其乘以tour.price金额,例如34000,因此总数将为68000,并放入addCommas金额中:$//总数应为68000,然后是addCommas函数,使其为68000

我尝试使用ejs的Scriptlet标记,并将此代码放在文件顶部

<%let selectedText = document.querySelector("#numOfPersons")%>
<%let valueOfSelected = selectedText.options[selectedText.selectedIndex].value %>    
<form>
     <div>
        <label for="numOfPersons">Number of Persons</label>
        <select id="numOfPersons">
          <option>2</option>
          <option>3</option>
          <option>4</option>
          <option>5</option>
          <option>6</option>
        </select>
      </div>

     Amount: $  <%= addCommas(tour.price * valueOfSelected) %> //addCommas() is a function that takes a number and adds comma every three numbers, ex: 100000 will become 100,000.
// tour.price is the total amount of the product. It's a Number. it's current value is 34000
</form>
它说选择的价值并没有定义。 我的第二次尝试是添加 在表单标签下面,但它也表示未定义

然后我尝试在文件下面添加脚本标记 让selectedText=document.querySelectornumOfPersons; 设valueOfSelected= selectedText.options[selectedText.selectedIndex]。值;

最后一次尝试时,我做了这个。 让totalAmount=tour.price*NumbervalueOfSelected; document.querySelectortotal.innerHTML=金额:$

所有结果都没有定义

调用时,预期结果应输出68000美元的总价


另外,由于某些原因,我无法使用4个空格创建另一个代码块。

任何DOM操作(如获取选定文本)都无法直接写入ejs文件。你必须在脚本tagi.e中这样做。在第二种方法中使用js

在脚本内部,请在加载文档后尝试获取值:

<script>
function addCommas() { // implement the function here }
document.addEventListener("DOMContentLoaded", function(event) { 
  // get values here like the `valueOfSelected`
  var tourPrice = "<%= tour.price %>";

  var valueWithCommasAdded = addCommas(tourPrice * valueOfSelected);
  var content = document.createTextNode("Amount: " + valueWithCommasAdded);

  // Finally append to the form
  document.forms[0].appendChild(content);

});
</script>

您必须这样做,因为您必须等待文档完全加载。在您可以从DOM获取值之前,EJB已经加载。您必须使用javascript动态地进行计算并将其放入DOM。

谢谢您的回答。我尝试了你的代码,通过执行console.logvalueWithCommasAdded,它一直工作到'var valueWithCommasAdded',但是附加部分在控制台中给出了一个错误未捕获的TypeError:未能在“节点”上执行“appendChild”:参数1不是“节点”类型。在HTMLDocument.` document.forms[0]在哪里使用它?我也尝试过用标签代替你的标签,将id为total的document.getElementById'total.innerHTMLvalueWithCommasAdded;放入表单中。我的尝试也失败了,请检查更新的答案。原来您需要添加一个文本节点。谢谢您的回答。它现在正在工作。但是当我在select标记中选择另一个选项时,它不会更新。我会自己找到解决这个问题的办法。再次感谢你!