【问题标题】:Getting select multiple option text with jQuery使用 jQuery 获取选择多个选项文本
【发布时间】:2021-03-20 08:12:32
【问题描述】:

我有一个简单的 HTML 表单:

<form>
<select class="form-control" name="select-1615762852985[]" multiple="true" id="select-1615762852985">
<option value="20" selected="true" id="select-1615762852985-0">Option 1</option>
<option value="20" id="select-1615762852985-1">Option 2</option></select>
</form>

我正在使用此代码来获取选项文本。

var selected = $('#'+label_id).find('option:selected').text();

选择单个选择时,结果是正确的:“选项1”或“选项2”

但是当你同时选择两者时,结果会串联在一起“Option 1Option 2”,“Option 1Option 2”

有没有办法在不连接结果的情况下做到这一点?

【问题讨论】:

标签: jquery


【解决方案1】:

您可以使用map() 从选定的option 元素构建文本数组:

$('form').on('submit', e => {
  e.preventDefault();
  let selected = $(e.target).find('select option:selected').map((i, opt) => opt.textContent).get();
  console.log(selected);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form>
  <select class="form-control" name="select-1615762852985[]" multiple="true" id="select-1615762852985">
    <option value="20" selected="true" id="select-1615762852985-0">Option 1</option>
    <option value="20" id="select-1615762852985-1">Option 2</option>
  </select>
  <button type="submit">Submit</button>
</form>

【讨论】:

  • 谢谢!有没有办法让它直接选择ID。无法让它工作:jQuery('#'+label_id).find('select option:selected').map((i, opt) => opt.textContent).get();
  • 应该可以,只要 label_id 是父元素的有效选择器
  • 它是有效的,但我得到一个空的结果。
  • 选择select id导致空白结果,选择form id导致Option 1,Option 2
  • 如果 label_id 持有 select 的 id,则在 find() 中从选择器中删除 'select'
【解决方案2】:

只是普通的 JS 解决方案,使用 querySelectorAll 获取所有选项并使用 ... 扩展运算符创建一个数组,然后仅映射选定的值。

var sel = [...document.querySelectorAll("#select-1615762852985 option")].map(s => s.selected ? s.text : []).flat()


console.log(sel)
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form>
  <select class="form-control" name="select-1615762852985[]" multiple="true" id="select-1615762852985">
    <option value="20" selected="true" id="select-1615762852985-0">Option 1</option>
    <option value="20" id="select-1615762852985-1" selected="true">Option 2</option>
    <option value="20" id="select-1615762852985-1">Option 3</option>

  </select>
</form>

或者像这样:

var sel = [...document.querySelectorAll("#select-1615762852985 option")].filter(s => s.selected).map(s=>s.text)

【讨论】:

  • 谢谢!这很奇怪,但是在测试时它给了我选项 1,选项 2,
  • @ScottPaterson 我的代码有错误。示例中现在 select 中还有 3 个选项,选择了 2 个。
猜你喜欢
  • 2010-11-26
  • 2015-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-02
  • 1970-01-01
  • 2021-12-09
  • 1970-01-01
相关资源
最近更新 更多