首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >document.querySelectorAll不检测多个select的数据

document.querySelectorAll不检测多个select的数据
EN

Stack Overflow用户
提问于 2021-02-10 06:32:36
回答 2查看 24关注 0票数 0

我有这个索引:

代码语言:javascript
复制
<select id="lstIngredientes" name="lstIngredientes" class="form-control" multiple="multiple">
                    <option value="Gambas" data-precio="2" data-base="S" class="base">Gambas</option>
                    <option value="Cerdo" data-precio="1.75" data-base="S" class="base">Cerdo</option>
                    <option value="Pollo" data-precio="1.50" data-base="S" class="base">Pollo</option>
                    <option value="Ternera" data-precio="2" data-base="S" class="base">Ternera</option>
                    <option value="Almendras" data-precio="0.50" data-base="N">Almendras</option>
                    <option value="Nuez" data-precio="0.60" data-base="N">Nuez</option>
                    <option value="Pimiento" data-precio="0.40" data-base="N">Pimiento</option>
                    <option value="Bambu" data-precio="0.60" data-base="N">Bambú</option>

我想给它添加一个这样的限制:

代码语言:javascript
复制
if(!document.querySelectorAll('option[data-base="S"]') ==1)
    mensaje("You can only choose one base ingredient.");


if(!document.querySelectorAll("option[data-base='N']").value > 0)
    mensaje("At least 1 optional ingredient.");

但无论条件是否满足,我都会跳过这两条消息。你知道为什么它不起作用吗?谢谢。

EN

回答 2

Stack Overflow用户

发布于 2021-02-10 06:55:11

querySelectorAll将返回一个长度,您可以使用它的HTMLCollection属性来计算数值。

伪类选择器:checked可用于仅选择您选择的选项。

例如:

代码语言:javascript
复制
document.querySelector('form').
  addEventListener('submit', (e) => {
     e.preventDefault();
     const baseCount =
       document.querySelectorAll('[data-base="S"]:checked').length;
     if (baseCount !== 1) {
       alert("You can only choose one base ingredient.");
       return;
     }
     const optCount = 
       document.querySelectorAll('[data-base="N"]:checked').length;
     if (optCount < 1) {
       alert("At least 1 optional ingredient.");
       return;
     }
     alert('Everything is good!!');
  });
代码语言:javascript
复制
select {
  height: 140px;
}

[data-base="S"] {
  background-color: #EEF;
}
代码语言:javascript
复制
<form>
<select id="lstIngredientes" name="lstIngredientes" class="form-control" multiple="multiple">
<option
  value="Gambas"
  data-precio="2"
  data-base="S"
  class="base">Gambas</option>
<option 
  value="Cerdo"
  data-precio="1.75"
  data-base="S"
  class="base">Cerdo</option>
<option 
  value="Pollo"
  data-precio="1.50"
  data-base="S"
  class="base">Pollo</option>
<option 
  value="Ternera"
  data-precio="2"
  data-base="S"
  class="base">Ternera</option>
<option 
  value="Almendras"
  data-precio="0.50"
  data-base="N">Almendras</option>
<option 
  value="Nuez"
  data-precio="0.60"
  data-base="N">Nuez</option>
<option 
  value="Pimiento" 
  data-precio="0.40" 
  data-base="N">Pimiento</option>
<option 
  value="Bambu" 
  data-precio="0.60" 
  data-base="N">Bambú</option>                  
</select>
<br/>
<button type="submit">Submit</button>
</form>

票数 1
EN

Stack Overflow用户

发布于 2021-02-10 06:45:08

要获得选定的选项,您需要使用:checked来获得选定的选项。

代码语言:javascript
复制
var sSelected = document.querySelectorAll('option[data-base="S"]:checked');
console.log(sSelected.length);

要获取所有值,您需要循环,因为它是一个集合

代码语言:javascript
复制
var nSelected = document.querySelectorAll('option[data-base="N"]:checked');
console.log(nSelected.length);
nSelected.forEach(function (option) {
  console.log(option.value, option.dataset.precio);
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66128209

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档