jQuery ตรวจสอบความถูกต้องเลือก


146

ฉันพยายามตรวจสอบองค์ประกอบการเลือก html โดยใช้ปลั๊กอินการตรวจสอบ jQuery ฉันตั้งค่ากฎ "ต้อง" เป็นจริง แต่จะผ่านการตรวจสอบความถูกต้องเสมอเพราะดัชนีศูนย์จะถูกเลือกตามค่าเริ่มต้น มีวิธีใดในการกำหนดค่าว่างที่ถูกใช้โดยกฎที่ต้องการ?

UPD ตัวอย่าง. ลองนึกภาพเรามีตัวควบคุม html ต่อไปนี้:

<select>
  <option value="default">Choose...</option>
  <option value="1">1</option>
  <option value="2">2</option>
</select>

ฉันต้องการให้ปลั๊กอินการตรวจสอบความถูกต้องใช้ค่า "default" เป็นค่าว่าง


วางโค้ดบางส่วนเพื่อให้เราสามารถช่วยได้
ลี

เป็นไปได้ที่ซ้ำกัน: stackoverflow.com/questions/1271640/jquery-validate-select-box
cregox

คำตอบ:


213

คุณสามารถเขียนกฎของคุณเอง!

 // add the rule here
 $.validator.addMethod("valueNotEquals", function(value, element, arg){
  return arg !== value;
 }, "Value must not equal arg.");

 // configure your validation
 $("form").validate({
  rules: {
   SelectName: { valueNotEquals: "default" }
  },
  messages: {
   SelectName: { valueNotEquals: "Please select an item!" }
  }  
 });

1
คุณสามารถทดสอบข้อความที่เลือกแทนค่าเช่นนี้:$.validator.addMethod("valueNotEquals", function(value, element, arg){ return return arg != jQuery(element).find('option:selected').text(); }, "Value must not equal arg.");
Pablo SG Pacheco

11
เพื่อช่วยให้ผู้อ่านในอนาคต: ที่บอกว่า SelectName นั้นหมายความว่าค่าของแอตทริบิวต์ชื่อและไม่ใช่ค่าของแอตทริบิวต์ id นี่เป็นความสับสนเล็กน้อยตั้งแต่เมื่อทำงานใน JS หนึ่งมักจะทำงานกับ id และไม่ใช่ชื่อ ดูเอกสารประกอบที่นี่ : "กฎ (ค่าเริ่มต้น: กฎอ่านจากมาร์กอัป (คลาส, คุณลักษณะ, ข้อมูล)) ประเภท: คู่คีย์ของคีย์ / ค่ากำหนดกฎที่กำหนดเองคีย์คือชื่อขององค์ประกอบ"
Dror

239

วิธีแก้ปัญหาที่ง่ายขึ้นได้รับการอธิบายไว้ที่นี่: ตรวจสอบกล่องเลือก

ทำให้ค่าว่างและเพิ่มแอตทริบิวต์ที่จำเป็น

<select id="select" class="required">
<option value="">Choose an option</option> 
<option value="option1">Option1</option>
<option value="option2">Option2</option>
<option value="option3">Option3</option>
</select>

11
แต่คุณต้องให้ตัวเลือกของคุณมีค่าว่างเปล่า - เป็นไปไม่ได้เสมอหรือเป็นที่ต้องการ
Muleskinner

4
สิ่งนี้ไม่ควรเป็นคำตอบที่ยอมรับได้เนื่องจากผู้โพสต์ดั้งเดิมขอให้ใช้ "กฎ" ซึ่งเป็นตัวเลือกที่ป้อนให้กับ Constructor ที่ตรวจสอบความถูกต้องและไม่ปรากฏในมาร์กอัป บางครั้งคุณไม่มีความหรูหราในการแก้ไขมาร์กอัพ (และโดยส่วนตัวฉันไม่ต้องการใส่ตรรกะในมาร์กอัป)
Mason Houtz

3
@ MasonHoutz มันยังคงเป็นตรรกะในมาร์กอัปไม่ว่าจะเป็นตรรกะที่คาดหวังว่า value = "" หรือ value = "เริ่มต้น"
บิลเลียด



9

คุณต้องใส่validate[required]เป็นคลาสของตัวเลือกนี้จากนั้นจึงใส่ตัวเลือกที่มีค่า = ""

ตัวอย่างเช่น:

<select class="validate[required]">
  <option value="">Choose...</option>
  <option value="1">1</option>
  <option value="2">2</option>
</select>

7

ฉันไม่รู้ว่าปลั๊กอินเป็นเวลาที่คำถามถูกถาม (2010) แต่ฉันประสบปัญหาเดียวกันในวันนี้และแก้ไขด้วยวิธีนี้:

  1. ตั้งชื่อแอตทริบิวต์ให้แท็กที่คุณเลือก ตัวอย่างเช่นในกรณีนี้

    <select name="myselect">

  2. แทนที่จะทำงานกับ attribute value = "default" ในตัวเลือก tag ให้ปิดการใช้งานตัวเลือก default หรือ set value = "" ตามที่ Andrew Coats แนะนำ

    <option disabled="disabled">Choose...</option>

    หรือ

    <option value="">Choose...</option>

  3. ตั้งค่ากฎการตรวจสอบปลั๊กอิน

    $( "#YOUR_FORM_ID" ).validate({ rules: { myselect: { required: true } } });

    หรือ

    <select name="myselect" class="required">

Obs: โซลูชันของ Andrew Coats ใช้งานได้เฉพาะเมื่อคุณมีตัวเลือกเพียงตัวเดียวในแบบฟอร์มของคุณ หากคุณต้องการให้โซลูชันของเขาทำงานมากกว่าหนึ่งเลือกให้เพิ่มแอตทริบิวต์ชื่อให้กับการเลือกของคุณ

หวังว่ามันจะช่วย! :)


1
ในระยะสั้นเพิ่มrequiredคุณลักษณะให้กับ<select>แท็กและเพิ่มdisabledคุณลักษณะไปที่<option>แท็กแรก(หรือหนึ่งที่มีselectedคุณลักษณะถ้ามี)
Stephen Stephen

4

นี่คือตัวอย่างที่ง่ายและเข้าใจได้:

   <select class="design" id="sel" name="subject">
        <option value="0">- Please Select -</option>
        <option value="1"> Example1 </option>
        <option value="2"> Example2 </option>
        <option value="3"> Example3 </option>
        <option value="4"> Example4 </option>
   </select>

    <label class="error" id="select_error" style="color:#FC2727"><b> Warning : You have to Select One Item.</b></label><td>

    <input type="submit" name="sub" value="Gönder" class="">

JQuery:

jQuery(function() {  

jQuery('.error').hide(); // Hide Warning Label. 

jQuery("input[name=sub]").on("click", function() {

   var returnvalue;

   if(jQuery("select[name=subject]").val() == 0) {

        jQuery("label#select_error").show(); // show Warning 
        jQuery("select#sel").focus();  // Focus the select box      
        returnvalue=false;   

}

return returnvalue;

});
      });  // you can change jQuery with $

2
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.17.0/jquery.validate.min.js"></script>

 <form id="myform"> 
       <select class="form-control" name="user_type">
        <option value="">Select</option>
        <option value="2">1</option>
        <option value="3">2</option>
        </select>
       </form>


<script>
  $('#myform').validate({ // initialize the plugin
            rules: {
          user_type:{ required: true},
         }
      });
</script>

เลือกค่าจะว่างเปล่า


2
ในขณะที่ข้อมูลโค้ดนี้อาจแก้ไขคำถามรวมถึงคำอธิบายช่วยปรับปรุงคุณภาพของโพสต์ของคุณ จำไว้ว่าคุณกำลังตอบคำถามสำหรับผู้อ่านในอนาคตและคนเหล่านั้นอาจไม่ทราบสาเหตุของการแนะนำรหัสของคุณ โปรดอย่าพยายามทำให้รหัสของคุณแน่นเกินไปด้วยคำอธิบายที่อธิบายซึ่งจะช่วยลดความสามารถในการอ่านของทั้งรหัสและคำอธิบาย!
Filnor

1

ง่ายมากคุณต้องได้รับค่าฟิลด์เลือกและไม่สามารถเป็น "ค่าเริ่มต้น" ได้

if($('select').val()=='default'){
    alert('Please, choose an option');
    return false;
}

1

วิธีการแก้ปัญหาดังกล่าวโดย @JMP ทำงานในกรณีของฉันกับการเปลี่ยนแปลงเล็ก ๆ น้อย ๆ : ผมใช้element.valueแทนในvalueaddmethod

$.validator.addMethod("valueNotEquals", function(value, element, arg){
    // I use element.value instead value here, value parameter was always null
    return arg != element.value; 
}, "Value must not equal arg.");

// configure your validation
$("form").validate({
    rules: {
        SelectName: { valueNotEquals: "0" }
    },
    messages: {
        SelectName: { valueNotEquals: "Please select an item!" }
    }  
});

อาจเป็นไปได้ว่าฉันมีกรณีพิเศษที่นี่ แต่ไม่ได้ติดตามสาเหตุ แต่โซลูชันของ @ JMP ควรทำงานในกรณีปกติ


0

วิธีการตรวจสอบความถูกต้องของการเลือก "qualifica" มี 3 แบบให้เลือก

$(document).ready(function(){

    $('.validateForm').validate({
        rules: {
            fullname: 'required',
            ragionesociale: 'required',
            partitaiva: 'required',
            recapitotelefonico: 'required',
            qualifica: 'required',
            email: {
                required: true,
                email: true
            },
        },
        submitHandler: function(form) {

            var fullname = $('#fullname').val(),
                            ragionesociale = $('#ragionesociale').val(),
                            partitaiva = $('#partitaiva').val(),
                            email = $('#email').val(),
                            recapitotelefonico = $('#recapitotelefonico').val(),
                            qualifica = $('#qualifica').val(),
                            dataString = 'fullname=' + fullname + '&ragionesociale=' + ragionesociale + '&partitaiva=' + partitaiva + '&email=' + email + '&recapitotelefonico=' + recapitotelefonico + '&qualifica=' + qualifica;

            $.ajax({
                type: "POST",
                url: "util/sender.php",
                data: dataString,
                success: function() {

                    window.location.replace("./thank-you-page.php");


                }
            });
            return false;
        }
    });

});

3
ยินดีต้อนรับสู่ Stack Overflow! ขอบคุณสำหรับข้อมูลโค้ดนี้ซึ่งอาจให้ความช่วยเหลือระยะสั้นแบบ จำกัด คำอธิบายที่เหมาะสมจะช่วยปรับปรุงมูลค่าในระยะยาวอย่างมากโดยการแสดงว่าเหตุใดจึงเป็นวิธีแก้ปัญหาที่ดีและจะทำให้มีประโยชน์มากขึ้นสำหรับผู้อ่านในอนาคตด้วยคำถามอื่น ๆ ที่คล้ายกัน โปรดแก้ไขคำตอบของคุณเพื่อเพิ่มคำอธิบายรวมถึงข้อสมมติที่คุณได้ทำไว้
Toby Speight
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.