การตรวจสอบความถูกต้องของกลุ่มปุ่มตัวเลือกโดยใช้ปลั๊กอินการตรวจสอบ jQuery


128

วิธีดำเนินการตรวจสอบความถูกต้องสำหรับกลุ่มปุ่มตัวเลือก (ควรเลือกปุ่มตัวเลือกหนึ่งปุ่ม) โดยใช้ปลั๊กอินตรวจสอบ jQuery


ดูคำตอบจาก c.reeves ในforum.jquery.com/topic/…

มีเครื่องมือตรวจสอบ jQuery ใหม่ที่มีประสิทธิภาพและใช้งานง่าย คุณสามารถตรวจสอบได้ที่: code.google.com/p/bvalidator
Nenad

ไม่ต้องการรวมทั้งห้องสมุดสำหรับบางสิ่งที่เรียบง่ายเช่นนี้
Doug Molineux

คำตอบ:


113

ด้วย jquery รุ่นใหม่กว่า (ฉันคิดว่า 1.3+) สิ่งที่คุณต้องทำคือตั้งค่าหนึ่งในสมาชิกของชุดวิทยุที่จำเป็นและ jquery จะดูแลส่วนที่เหลือ:

<input type="radio" name="myoptions" value="blue" class="required"> Blue<br />
<input type="radio" name="myoptions" value="red"> Red<br />
<input type="radio" name="myoptions" value="green"> Green

ข้างต้นจะต้องมีตัวเลือกวิทยุอย่างน้อย 1 ใน 3 ตัวเลือกที่มีชื่อ "ตัวเลือกของฉัน" ก่อนดำเนินการต่อ

คำแนะนำฉลากโดย Mahes, btw ทำงานได้อย่างยอดเยี่ยม!


นี่คือคำตอบที่ดีที่สุดสำหรับฉันด้วยการอัปเดต jQuery +1
Kieran Andrews

6
ปัญหาเดียวของปัญหานี้คือเมื่อไม่มีการตรวจสอบ jQuery validate จะไฮไลต์ปุ่มตัวเลือกแรกเป็นสีแดง แต่ในความเป็นจริงคุณอาจต้องการเน้นทั้งหมด นอกจากนี้เมื่อคุณตรวจสอบปุ่มตัวเลือกใด ๆ สีแดงจะหายไป
ยกเลิก

2
@ แฮ็กคุณสามารถใช้ฟังก์ชันการเรียกกลับ errorPlacement ในตัวเลือกการตรวจสอบความถูกต้องเพื่อวางข้อความแสดงข้อผิดพลาดที่มีความหมายได้หรือไม่?
autonomatt

2
@Haacked: เพิ่มfocusInvalid: falseไปยังvalidate()ตัวเลือกจะป้องกันไม่ให้ไฮไลต์ของปุ่มตัวเลือกแรก
Jim Miller

2
ฉันทำแบบนี้เสมอและวางตำแหน่งป้ายกำกับข้อผิดพลาดในฟังก์ชัน errorPlacement นี่คือสิ่งที่ฉันทำสำหรับปุ่มตัวเลือก: if (element.is ("input: radio")) {error.insertAfter (element.parent ()); } else {error.insertAfter (องค์ประกอบ); }
Francisco Goldenstein

24

ใช้กฎต่อไปนี้เพื่อตรวจสอบการเลือกกลุ่มปุ่มตัวเลือก

myRadioGroupName : {required :true}

myRadioGroupName คือค่าที่คุณกำหนดให้กับแอตทริบิวต์ name


15
โปรดทราบว่าหากคุณต้องการควบคุมตำแหน่งของป้ายคุณสามารถระบุป้ายกำกับข้อผิดพลาดของคุณเองในตำแหน่งที่คุณต้องการพร้อมกับข้อความที่คุณต้องการ: <label for = "myRadioGroupName" class = "error" style = "display: none; "> โปรดเลือกอย่างใดอย่างหนึ่ง </label>
Tom

@ ทอมมันไม่มีประโยชน์ที่จะเขียนlabelแท็กสำหรับข้อผิดพลาดด้วยตัวคุณเองจริงๆแล้วปลั๊กอินจะเพิ่มแท็กป้ายข้อผิดพลาดนี้โดยอัตโนมัติ
ahmehri

3
เมื่อนานมาแล้ว แต่ฉันคิดว่าสิ่งที่ฉันพยายามทำคือวาง <label> ไว้ที่อื่นใน DOM แทนที่จะเป็นที่ที่ปลั๊กอินสร้างขึ้นโดยอัตโนมัติ นอกจากนี้ยังค่อนข้างเป็นไปได้ที่พฤติกรรมของปลั๊กอินจะเปลี่ยนไปในช่วง 5 ปีที่ผ่านมา ...
ทอม

น่าเสียดายที่ต้องใช้ "ชื่อ" แทน "ประเภท" ที่นี่สำหรับข้อผิดพลาดที่กำหนดเอง
justdan23

19

คุณยังสามารถใช้สิ่งนี้:

<fieldset>
<input type="radio" name="myoptions[]" value="blue"> Blue<br />
<input type="radio" name="myoptions[]" value="red"> Red<br />
<input type="radio" name="myoptions[]" value="green"> Green<br />
<label for="myoptions[]" class="error" style="display:none;">Please choose one.</label>
</fieldset>

และเพิ่มกฎนี้

rules: {
 'myoptions[]':{ required:true }
}

พูดถึงวิธีเพิ่มกฎ


1
แต่สิ่งนี้จะนำมาซึ่งข้อผิดพลาดในการตรวจสอบ HTML5 ฉันเชื่อว่าเนื่องจากแอตทริบิวต์ for จำเป็นต้องมีการอ้างอิง ID (ซึ่งเราไม่สามารถตั้งค่าปุ่มตัวเลือก 3 ปุ่มเป็น ID เดียวกันได้)
armyofda12mnkeys

1
มีความแตกต่างอย่างมากระหว่างแอตทริบิวต์ชื่อและแอตทริบิวต์ id
Norman H

2
โปรดทราบว่าปุ่มตัวเลือกควรส่งคืนเพียงค่าเดียวดังนั้นจึงname="myoptions[]"ค่อนข้างสับสนเนื่องจากสามารถส่งคืนค่าหลายค่าได้
Dementic

วางข้อความแสดงข้อผิดพลาดไว้ด้านบน <style> .radio-group {ตำแหน่ง: ญาติ; ขอบด้านบน: 40px; } # myoptions-error {ตำแหน่ง: absolute; ด้านบน: -25px; } </style> <div class = "radio-group"> <input type = "radio" name = "myoptions" value = "blue" class = "required"> สีน้ำเงิน <br /> <input type = "radio" name = "myoptions" value = "red"> สีแดง <br /> <input type = "radio" name = "myoptions" value = "green"> สีเขียว </div> </div> <! - end radio- กลุ่ม ->
Sonobor

4

ตามคำตอบของ Brandon แต่ถ้าคุณใช้ ASP.NET MVC ซึ่งใช้การตรวจสอบความถูกต้องที่ไม่สร้างความรำคาญคุณสามารถเพิ่มแอตทริบิวต์ data-val ลงในอันแรกได้ ฉันยังต้องการให้มีป้ายกำกับสำหรับปุ่มตัวเลือกแต่ละปุ่มเพื่อการใช้งาน

<span class="field-validation-valid" data-valmsg-for="color" data-valmsg-replace="true"></span>
<p><input type="radio" name="color" id="red" value="R" data-val="true" data-val-required="Please choose one of these options:"/> <label for="red">Red</label></p>
<p><input type="radio" name="color" id="green" value="G"/> <label for="green">Green</label></p>
<p><input type="radio" name="color" id="blue" value="B"/> <label for="blue">Blue</label></p>

3

อีกวิธีหนึ่งในการตรวจสอบความถูกต้องก็เป็นเช่นนี้

var $radio = $('input:radio[name="nameRadioButton"]');
$radio.addClass("validate[required]");

ฉันหวังว่าตัวอย่างของฉันจะช่วยคุณได้


2

ผมมีปัญหาเหมือนกัน. ยุ่งยากเพียงแค่เขียนไฮไลต์แบบกำหนดเองและฟังก์ชันยกเลิกไฮไลต์สำหรับตัวตรวจสอบความถูกต้อง การเพิ่มสิ่งนี้ในตัวเลือก validaton ควรเพิ่มระดับข้อผิดพลาดให้กับองค์ประกอบและป้ายกำกับตามลำดับ:

        'highlight': function (element, errorClass, validClass) {
            if($(element).attr('type') == 'radio'){
                $(element.form).find("input[type=radio]").each(function(which){
                    $(element.form).find("label[for=" + this.id + "]").addClass(errorClass);
                    $(this).addClass(errorClass);
                });
            } else {
                $(element.form).find("label[for=" + element.id + "]").addClass(errorClass);
                $(element).addClass(errorClass);
            }
        },
        'unhighlight': function (element, errorClass, validClass) {
            if($(element).attr('type') == 'radio'){
                $(element.form).find("input[type=radio]").each(function(which){
                    $(element.form).find("label[for=" + this.id + "]").removeClass(errorClass);
                    $(this).removeClass(errorClass);
                });
            }else {
                $(element.form).find("label[for=" + element.id + "]").removeClass(errorClass);
                $(element).removeClass(errorClass);
            }
        },

2

รหัสสำหรับปุ่มตัวเลือก -

<div>
<span class="radio inline" style="margin-right: 10px;">@Html.RadioButton("Gender", "Female",false) Female</span>
<span class="radio inline" style="margin-right: 10px;">@Html.RadioButton("Gender", "Male",false) Male</span>                                                        
<div class='GenderValidation' style="color:#ee8929;"></div>    
</div> 

<input class="btn btn-primary" type="submit" value="Create" id="create"/>

และรหัส jQuery-

<script>
    $(document).ready(function () {
        $('#create').click(function(){

            var gender=$('#Gender').val();
            if ($("#Gender:checked").length == 0){
                $('.GenderValidation').text("Gender is required.");
                return false;
            }
        });
    });
</script>

0

วางข้อความแสดงข้อผิดพลาดไว้ด้านบน

   <style> 

 .radio-group{ 
      position:relative; margin-top:40px; 
 } 

 #myoptions-error{ 
     position:absolute; 
     top: -25px; 
  } 

 </style> 

 <div class="radio-group"> 
 <input type="radio" name="myoptions" value="blue" class="required"> Blue<br /> 
 <input type="radio" name="myoptions" value="red"> Red<br /> 
 <input type="radio" name="myoptions" value="green"> Green </div>
 </div><!-- end radio-group -->
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.