如何在从Mongo提取数据后,在HTML中(使用ejs)呈现复选框的值,以供用户编辑?

8
我目前将多项选择题的数据保存在Mongo中,并标记正确答案。在Mongo中,我会将它们保存为以下格式:question.options.option1.check = "on"。
当我进入“编辑”页面时,我从Mongo中提取特定的记录,并将其作为“question”在ejs中可用。我可以轻松地填写可编辑字段值,例如question.question、question.options.option1.text等。但是,我还想标记先前已选中的复选框。以下是复选框的示例。
<input  id=opt1 type="checkbox" name="check1"  >

当我使用<input id=opt1 type="checkbox" name="check1" <%=question.options.option1.check%> >时,它不起作用,我还尝试过<input id=opt1 type="checkbox" name="check1" checked="<%=question.options.option1.check%>">,但这也无效。但是如果我给属性 "checked" = "任何值或不设置任何值",它会被选中,这是错误的。
所以问题是,在编辑页面上检查适当的复选框的正确方法是什么?
3个回答

18

输入类型复选框(input type checkbox)即使您不为其分配任何值,也会将属性“checked”设置为true。

因此,您可能需要执行以下操作:

<input id="opt1" type="checkbox" name="check1" <%= question.options.option1.check ? "checked" : "" %> />

如果这对您有用,请告诉我。如果在 <%=%> ejs 标记内无法评估条件,则可能需要在显示之前评估条件并将其存储在另一个变量中:

<% let checked = question.options.option1.check ? "checked" : "" %>
<input id="opt1" type="checkbox" name="check1" <%= checked %> />

甜的,第一个起作用了。所以“?”起到了else的作用? <%= question.options.option1.check ? "checked" : "" %> - user856984
1
问号用于将值分配给变量的缩写“if”操作: 使用方法如下: let variableToStoreValue = condition ? valueIfTrue : valueIfFalse; - adonike

1
您可以这样放置:像这样:
  <label class="form-check-label" for="radio2">
         <input type="radio" class="form-check-input" 
             id="rstatus1" 
             name="status"
             value="S" 
            <%= status === 'S' ? 'checked' : '' %> >SIM
  </label>

0

我有一个类似的问题。我使用了adonike提供的第二个选项。以下是我使用它的代码块。第一个选项将所有复选框设置为true;即使我将值设置为false、'false'或'',它也是如此。将变量unescaped作为<%-genChk%>同样有效。

<% genres.forEach( g => {%>
  <% let genreChk = g.checked ? 'checked' : '' %>
  <input type="checkbox" name="gen" id="<%=g._id%>" value="<%=g._id%>" <%=genreChk%>>
  <label for="<%=g._id%>"><%=g.name%></label>
<%})%>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接