如何让JavaScript文件影响EJS变量
我在index.ejs文件中定义了一个名为complete的ejs变量,并检查用户是否使用以下命令填写了日志:如何让JavaScript文件影响EJS变量,javascript,node.js,ejs,Javascript,Node.js,Ejs,我在index.ejs文件中定义了一个名为complete的ejs变量,并检查用户是否使用以下命令填写了日志: <% if (complete == false) { %> <button class="new_journal">Fill Out Journal<i class="fa fa-plus" aria-hidden="true"></i></button> <% } else { %> <
<% if (complete == false) { %>
<button class="new_journal">Fill Out Journal<i class="fa fa-plus" aria-hidden="true"></i></button>
<% } else { %>
<div class="new_journal2">You Already Filled Out Your Journal</div>
<% }% >
但是,当计时器达到0时,它不会更改complete的值。您以错误的方式混淆了客户端javascript和EJB。 根据您的代码,您提到的javascript在客户端运行,而您提到的EJS代码将在服务器端运行,因此此时它无法读取完整的变量值
我看到您在计时器中有一个日期值,所以我希望您有数据服务器端,使用它在服务器端而不是客户端导出完整的变量值。我不使用ejs,但我猜ejs不会在变量更改时神奇地更新。请注意,setTimeout对于时钟/计时器来说是可怕的,因为它不准确。上面的评论是正确的。EJS仅由服务器端代码更新,并且每次渲染仅计算一次。您无权访问,也不能更改JavaScript中的EJS变量。您必须在JS文件中手动更新模板。@AustinEzell如何更新JS文件中的模板?:P
var hour = 23;
var minutes = 59;
var seconds = 60;
var value = 1;
setInterval(function(){
var time = document.getElementById('timer').innerHTML = "Hours: " + hour +
" Minutes: " + minutes + " Seconds: " + seconds;
seconds -= 1;
if(seconds == 0) {
minutes -= 1;
seconds = 60;
};
if(minutes == 0) {
hour -= 1;
minutes = 60;
};
if(hours == 0) {
complete = false;
}
}, 1000);