javascript - HTML <select> 元素发送默认选择,即使未选择

标签 javascript html forms ejs

我有一个通过 EJS 生成的下拉列表,它将默认的 selected 值设置为该公司当前的管理员值。

用户应该能够取消选择当前管理员并选择其他管理员,从而​​删除当前管理员作为公司管理员的身份。

但是,选择另一个选项和/或按住 CTRL 键并单击默认选项不会取消选择它,并且表单会发送默认选项和任何其他可能选择的选项。

我是否错过了 optionselected 属性的工作方式?

<div id="adminDropdown">
  <% if (companyAdmins) { %>
    <select name="chooseAdmins" id="chooseAdmins" form="updateCompany" multiple class="form-control">
      <% for (let location of currentCompany.locations ) { %>
        <% for (let contact of location.contacts) { %> 
          <option value="<%= contact.id %>" <%= contact.isCompanyAdmin ? 'selected' : '' %>><%= contact.firstName %> <%= contact.lastName %></option>
        <% } %>
      <% } %>
    </select>
    <span class="muted"><small>Hold `CTRL` to select multiple admins, or to deselect an admin.<br />
      To add users to this list, first add them to their Location's "Contacts".
    </small></span>
  <% } else { %>
    <div class="alert alert-warning">Error loading admins data</div>
  <% } %>
</div>

此外,检查 chrome 中的元素,“selected”属性在加载时正确显示,但在单击或 ctrl+单击选项后不会消失,就像它应该的那样。

最佳答案

我看到的问题是你没有关闭 select 内的第一个 for 循环

<% for (let location of currentCompany.locations ) { %>
    <% for (let contact of location.contacts) { %> 
        <option value="<%= contact.id %>" <%= contact.isCompanyAdmin ? 'selected' : '' %>><%= `${contact.firstName} ${contact.lastName}` %></option>
    <% } %>
<% } %>

顺便说一句,在我看来,在 ejs 中使用字符串文字只会降低代码的可读性。
你可以保持简单 <%= contact.firstName %> <%= contact.lastName %>

关于javascript - HTML <select> 元素发送默认选择,即使未选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61197504/

相关文章:

javascript - Rails 3触发AJAX提交单选按钮更改正在渲染html响应

javascript - 将 javascript 输入循环到 html 表单

javascript - 在 IE 中,onbeforeunload 事件是为不卸载页面的链接而触发的

javascript - 文本区域未被渲染

javascript - 动画窗口滚动

html - 图像上的导航箭头

html - 最大宽度的div不占用最大宽度

html - 如何将div的内容对齐到底部

PHP - 多种形式,提交时从两者获取值?

javascript - WebKitBlobBuilder 在 Safari 中可用吗?