简体   繁体   English

如何使用JavaScript以一种形式验证两组单选按钮?

[英]How to validate two sets of radio buttons in one form using JavaScript?

I have two sets of radio buttons in one form. 我有两种单选按钮。 You're not supposed to be able to send the form if you haven't checked one radio button per set. 如果您未选中每套单选按钮,则不应该发送表格。 If possible, I would like a solution with JS only (no jQuery). 如果可能的话,我只想用JS解决方案(不使用jQuery)。 I found a helpful function in an older question on here and tried to adapt it to my case, but I obviously failed. 我在这里的一个较旧的问题中找到了一个有用的功能,并试图使其适应我的情况,但是我显然失败了。 Where's my mistake? 我的错在哪里

<form>

<input type="radio" name="date_1" id="dat-1_27-10" value="2017-10-27" <?php echo $checked1 ;?> />
<input type="radio" name="date_1" id="dat-1_28-10" value="2017-10-28" <?php echo $checked2 ;?> />
<input type="radio" name="date_1" id="dat-1_03-11" value="2017-11-03" <?php echo $checked3 ;?> />
<input type="radio" name="date_1" id="dat-1_04-11" value="2017-11-04" <?php echo $checked4 ;?> />

<input type="radio" name="date_2" id="dat-2_27-10" value="2017-10-27" <?php echo $checked5 ;?> />
<input type="radio" name="date_2" id="dat-2_28-10" value="2017-10-28" <?php echo $checked6 ;?> />
<input type="radio" name="date_2" id="dat-2_03-11" value="2017-11-03" <?php echo $checked7 ;?> />
<input type="radio" name="date_2" id="dat-2_04-11" value="2017-11-04" <?php echo $checked8 ;?> />

<input type="submit" name="send" value="send" id="submit" onclick='return validateDateOne(); return validateDateTwo();'/>

</form>

<script>

function validateDateOne() {
      if (!$("input[name='date_1']:checked").val()) {
          alert('Please choose your favourite date');
          return false;
      }
      else {}
}

function validateDateTwo() {
      if (!$("input[name='date_2']:checked").val()) {
           alert('Please choose a second date');
           return false;
      }
      else {}
}

</script>

Call the function validateDateTwo() with retrun statement inside the else condition of function validateDateOne() instead of calling it in onclick. 在功能validateDateTwo()的else条件内使用retrun语句调用功能validateDateOne()而不是在onclick中调用它。

For Pure JS solution,i used querySelector instead of $ . 对于Pure JS解决方案,我使用了querySelector而不是$

 function validateDateOne() { if (!document.body.querySelector("input[name='date_1']:checked")) { alert('Please choose your favourite date'); return false; } else { return validateDateTwo(); } } function validateDateTwo() { if (!document.body.querySelector("input[name='date_2']:checked")) { alert('Please choose a second date'); return false; } else {} } 
 <form> <input type="radio" name="date_1" id="dat-1_27-10" value="2017-10-27" />2017-10-27 <input type="radio" name="date_1" id="dat-1_28-10" value="2017-10-28" />2017-10-28 <input type="radio" name="date_1" id="dat-1_03-11" value="2017-10-28" />2017-10-28 <input type="radio" name="date_1" id="dat-1_04-11" value="2017-11-04" />2017-11-04 <br/> <input type="radio" name="date_2" id="dat-2_27-10" value="2017-10-27" />2017-10-27 <input type="radio" name="date_2" id="dat-2_28-10" value="2017-10-28" />2017-10-28 <input type="radio" name="date_2" id="dat-2_03-11" value="2017-11-03" />2017-10-28 <input type="radio" name="date_2" id="dat-2_04-11" value="2017-11-04" />2017-11-04 <input type="submit" name="send" value="send" id="submit" onclick='return validateDateOne();'/> </form> 

Group your checks together in one function. 将支票归为一个功能。 Also I would recommend to attach a submit handler with jQuery. 另外,我建议使用jQuery附加提交处理程序。

Here is a working jsfiddle 这是一个工作的jsfiddle

<input type="submit" name="send" value="send" id="submit" />


$('#myform').submit(function(e){
        e.preventDefault();
      if (!$("input[name='date_1']:checked").val()) {
          alert('Please choose your favourite date');
          return;
      }
        if (!$("input[name='date_2']:checked").val()) {
           alert('Please choose a second date');
           return;
      }
      alert("submit")
});

Note that the Jquery submit handler is wrapped in a onDomReady Handler. 请注意,jQuery提交处理程序包装在onDomReady处理程序中。

Also: Client Side Validation is NEVER safe. 另外:客户端验证永远都不安全。 To be sure with the input data, validate it on the backend, too. 为了确保输入数据正确,请在后端也进行验证。

Try with validate the checked box length and add the validation function in onsubmit of the form instead of button click .no need a two function only single function is enough 与验证尝试checked框的长度,并添加validation函数onsubmit的形式,而不是button点击。没有需要两个函数只单一的功能就够了

 function validateDate() { if (!$("input[name='date_1']:checked").length) //validate first one { console.log('select any one in first part'); return false; } if (!$("input[name='date_2']:checked").length) //validate second one { console.log('select any one in second part') return false; } } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <form onsubmit="return validateDate()"> <!--only do with single function--> <input type="radio" name="date_1" id="dat-1_27-10" value="2017-10-27" <?php echo $checked1 ;?> /> <input type="radio" name="date_1" id="dat-1_28-10" value="2017-10-28" <?php echo $checked2 ;?> /> <input type="radio" name="date_1" id="dat-1_03-11" value="2017-11-03" <?php echo $checked3 ;?> /> <input type="radio" name="date_1" id="dat-1_04-11" value="2017-11-04" <?php echo $checked4 ;?> /> <input type="radio" name="date_2" id="dat-2_27-10" value="2017-10-27" <?php echo $checked5 ;?> /> <input type="radio" name="date_2" id="dat-2_28-10" value="2017-10-28" <?php echo $checked6 ;?> /> <input type="radio" name="date_2" id="dat-2_03-11" value="2017-11-03" <?php echo $checked7 ;?> /> <input type="radio" name="date_2" id="dat-2_04-11" value="2017-11-04" <?php echo $checked8 ;?> /> <input type="submit" name="send" value="send" id="submit" /> </form> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM