为了账号安全,请及时绑定邮箱和手机立即绑定

JavaScript 检查 Select 选项是否被选中

JavaScript 检查 Select 选项是否被选中

潇湘沐 2021-11-25 16:42:00
我在表单页面上有一个 select 元素,如果用户尝试提交而不进行选择,我希望更改标签的内部 html。这是html。  <div class="form-group">    <label for="FamilySize" name = "FamSizeLable">How Many in Your Household</label>    <select class="form-control" name = "FamilySize" id="FamilySize">      <option disabled selected value="">Size</option>      <option>1</option>      <option>2</option>      <option>3</option>      <option>4</option>      <option>5</option>      <option>Good god ya'll</option>    </select>  </div>我尝试过以几种不同的方式获取价值。  else if(!document.getElementById("FamilySize").value){    document.getElementByName("FamSizeLabel").innerHTML = "***You Must Select a Family Size***";    document.getElementById("FamSizeLabel").style.color = "red";    return false;  }和  else if(!document.querySelector('[id = "FamilySize"]').value){    document.getElementByName("FamSizeLabel").innerHTML = "***You Must Select a Family Size***";    document.getElementById("FamSizeLabel").style.color = "red";    return false;  }和  else if(document.querySelector('[id = "FamilySize"]').value==null){    document.getElementByName("FamSizeLabel").innerHTML = "***You Must Select a Family Size***";    document.getElementById("FamSizeLabel").style.color = "red";    return false;  }和  else if(document.querySelector('[id = "FamilySize"]').value==""){    document.getElementByName("FamSizeLabel").innerHTML = "***You Must Select a Family Size***";    document.getElementById("FamSizeLabel").style.color = "red";    return false;  }我还尝试在开发人员视图中使用 console.log 来查看我遗漏了什么。但是,我对 JavaScript 非常菜鸟,似乎无法确定它。当未选择 FamilySize 时,表单仍会被提交。我可以抓住这个服务器端,但我正在努力在 JavaScript 方面变得更好,所以想弄清楚/理解这一点。
查看完整描述

3 回答

?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

我已经编辑了我的原始帖子并包含了您的一些进一步输入元素。我目前使用该类form-control来决定必须检查哪些元素(您当然可以使用专门用于此目的的另一个类名)。然后我去使用Array.reduce()返回整体布尔值的方法检查它们。根据该值,进一步处理是否会发生......


为了简化错误处理,我使用每个测试变量的名称作为错误消息,我在每个输入元素之后的额外 div 中显示该错误消息。


var chk=Array.from(document.querySelectorAll('.form-control')),

    msg="You must enter a value for ";


document.querySelector('#subm').addEventListener('click',

 function(){

 if (chk.reduce(function(ac,el){

   el.parentNode.querySelector('div.error').innerHTML=

     el.value=="" ? msg+el.name : "";

   return ac || el.value==""},

   false)) return false;

 console.log('OK, your data will be submitted ...');

 // and further code ...

})

div.error {color: red;}

<div class="form-group">

    <label id = "EmailLabel" >Email address</label>

    <input type="email" class="form-control" name="Email" 

     autocomplete = "off" autofocus id="FormControlInput1"

     placeholder="name@example.com"><div class="error"></div>

  </div>

  <div class="form-group">

    <label id = "Fname" >First Name</label>

    <input type="text" class="form-control" name = "Fname" autocomplete = "off"  id="FnameFormControlInput" placeholder="John"><div class="error"></div>

  </div>

  <div class="form-group">

    <label id = "Lname" >Last Name</label>

    <input type="text" class="form-control" name ="Lname" autocomplete = "off"  id="LnameFormControlInput" placeholder="Doe"><div class="error"></div>

  </div>

  <div class="form-group">

    <label for="FamilySize">How Many in Your Household</label>

    <select class="form-control" name="FamilySize" id="FamilySize">

      <option disabled selected value="">Size</option>

      <option>1</option>

      <option>2</option>

      <option>3</option>

      <option>4</option>

      <option>5</option>

      <option>Good god ya'll</option>

    </select><div class="error"></div>

  </div>

  <div class="form-group">

    <label for="AgeGroup">Select Age Group</label>

    <select multiple class="form-control" name="AgeGroup" id="AgeGroup">

      <option>0-15</option>

      <option>16-24</option>

      <option>25-36</option>

      <option>37-45</option>

      <option>45-Dead</option>

    </select><div class="error"></div>

  </div> 

  <button id="subm">submit</button>


查看完整回答
反对 回复 2021-11-25
?
跃然一笑

TA贡献1826条经验 获得超6个赞

要访问选定的元素值或它的innerHTML,可以使用以下方法:


var e = document.getElementById("FamilySize");

// For the option tag value attribute:

var value = e.options[e.selectedIndex].value;

// For the option text:

var text = e.options[e.selectedIndex].text;

getElementsByName 方法没有单一选项。要访问标签的内容,您应该使用:


var labelInnerHTML = document.getElementsByName("FamSizeLable")[0].innerHTML

另请注意,您的代码中有拼写错误:


name = "FamSizeLable"

应该:


name = "FamSizeLabel"


查看完整回答
反对 回复 2021-11-25
?
智慧大石

TA贡献1946条经验 获得超3个赞

我终于通过给我的标签一个 id 解决了这个问题


  <div class="form-group">

  <label for="FamilySize" name = "FamSizeLable" id = "FamSizeLable">How Many in Your Household</label>

  <select class="form-control" name="FamilySize" id="FamilySize">

      <option disabled selected value="">Size</option>

      <option>1</option>

      <option>2</option>

      <option>3</option>

      <option>4</option>

      <option>5</option>

      <option>Good god ya'll</option>

    </select>

  </div>

然后修改我的 JavaScript 以选择选择器的 id 并检查值"":


  else if(document.querySelector('#FamilySize').value==""){

    //Here the # means id

    document.querySelector('#FamSizeLable').innerHTML = "***You Must Select a Family Size***";

    document.querySelector('#FamSizeLable').style.color = "red";

    return false;

  }


查看完整回答
反对 回复 2021-11-25
  • 3 回答
  • 0 关注
  • 493 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信