Yêu cầu xác thực jQuery Chọn


146

Tôi đang cố gắng xác thực phần tử chọn html bằng cách sử dụng plugin Xác thực jQuery. Tôi đặt quy tắc "bắt buộc" thành đúng nhưng nó luôn vượt qua xác thực vì chỉ số 0 được chọn theo mặc định. Có cách nào để xác định giá trị trống được sử dụng theo quy tắc bắt buộc không?

CẬP NHẬT. Thí dụ. Hãy tưởng tượng chúng ta có điều khiển html sau:

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

Tôi muốn plugin Xác thực sử dụng giá trị "mặc định" là trống.


Đặt một số đoạn mã để chúng tôi có thể giúp đỡ.
Lee

Câu trả lời:


213

Bạn có thể viết quy tắc của riêng bạn!

 // 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
Bạn có thể kiểm tra văn bản đã chọn thay vì giá trị, như thế này:$.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
Để giúp người đọc trong tương lai: Trường hợp nói là Chọn Tên, điều đó có nghĩa là giá trị của thuộc tính name chứ không phải giá trị của thuộc tính id. Điều này hơi khó hiểu vì khi làm việc trong JS, người ta thường làm việc với id chứ không phải tên. Xem tài liệu ở đây : "quy tắc (mặc định: quy tắc được đọc từ đánh dấu (lớp, thuộc tính, dữ liệu)) Loại: Cặp đối tượng Khóa / giá trị xác định quy tắc tùy chỉnh. Khóa là tên của một thành phần"
Dror

239

Một giải pháp dễ dàng hơn đã được nêu ra ở đây: Xác thực hộp chọn

Làm cho giá trị trống và thêm thuộc tính cần thiết

<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
Nhưng bạn phải cung cấp cho tùy chọn của mình một giá trị trống - không phải lúc nào cũng có thể hoặc mong muốn
Muleskinner

4
Đây không phải là câu trả lời được chấp nhận vì người đăng ban đầu đặc biệt yêu cầu sử dụng "quy tắc", đây là một tùy chọn được cung cấp cho nhà xây dựng xác thực và không có trong đánh dấu. Đôi khi bạn không có sự sang trọng trong việc sửa đổi đánh dấu. (Và cá nhân tôi, tôi chỉ không muốn đưa logic vào đánh dấu.)
Mason Houtz

3
@MasonHoutz vẫn là logic trong đánh dấu, cho dù logic đó có giá trị = "" hay value = "mặc định"
billrichards


30

sử dụng quy tắc tối thiểu

đặt giá trị tùy chọn đầu tiên thành 0

'selectName':{min:1}

Giá trị đầu tiên là cố định (có một số logic phụ trợ so với giá trị này)
SiberianGuy

9

Bạn chỉ cần đặt validate[required]làm lớp của lựa chọn này và sau đó đặt tùy chọn với value = ""

ví dụ:

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

7

Tôi không biết plugin là gì khi câu hỏi được hỏi (2010), nhưng tôi đã đối mặt với cùng một vấn đề ngày hôm nay và giải quyết nó theo cách này:

  1. Cung cấp cho thẻ chọn của bạn một thuộc tính tên. Ví dụ trong trường hợp này

    <select name="myselect">

  2. Thay vì làm việc với thuộc tính value = "default" trong tùy chọn thẻ, hãy tắt tùy chọn mặc định hoặc đặt value = "" theo đề xuất của Andrew Coats

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

    hoặc là

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

  3. Đặt quy tắc xác thực plugin

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

    hoặc là

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

Quan sát: Giải pháp của Andrew Coats chỉ hoạt động nếu bạn chỉ có một lựa chọn trong biểu mẫu của mình. Nếu bạn muốn giải pháp của anh ấy hoạt động với nhiều hơn một lựa chọn, hãy thêm thuộc tính name vào lựa chọn của bạn.

Hy vọng nó giúp! :)


1
Tóm lại, thêm requiredthuộc tính vào <select>thẻ và thêm disabledthuộc tính vào <option>thẻ đầu tiên (hoặc selectedthuộc tính có thuộc tính nếu có)
Stephen

4

Đây là ví dụ đơn giản và dễ hiểu:

   <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>

chọn giá trị sẽ để trống


2
Mặc dù đoạn mã này có thể giải quyết câu hỏi, bao gồm một lời giải thích thực sự giúp cải thiện chất lượng bài đăng của bạn. Hãy nhớ rằng bạn đang trả lời câu hỏi cho độc giả trong tương lai và những người đó có thể không biết lý do cho đề xuất mã của bạn. Xin vui lòng cố gắng không làm đông mã của bạn với các bình luận giải thích, điều này làm giảm khả năng đọc của cả mã và các giải thích!
Filnor

1

Thật đơn giản, bạn cần lấy giá trị trường Chọn và nó không thể là "mặc định".

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

1

Giải pháp được đề cập bởi @JMP hoạt động trong trường hợp của tôi với một chút sửa đổi: Tôi sử dụng element.valuethay vì valuetrong addmethod.

$.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!" }
    }  
});

Có thể là tôi có một trường hợp đặc biệt ở đây, nhưng không tìm ra nguyên nhân. Nhưng giải pháp của @ JMP nên hoạt động trong các trường hợp thông thường.


0

Làm thế nào để xác thực chọn "Qualifica" nó có 3 chọn

$(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
Chào mừng bạn đến với Stack Overflow! Cảm ơn bạn vì đoạn mã này, có thể cung cấp một số trợ giúp ngắn hạn có giới hạn. Một lời giải thích hợp sẽ cải thiện đáng kể giá trị lâu dài của nó bằng cách chỉ ra lý do tại sao đây là một giải pháp tốt cho vấn đề và sẽ giúp nó hữu ích hơn cho những người đọc tương lai với những câu hỏi tương tự khác. Vui lòng chỉnh sửa câu trả lời của bạn để thêm một số giải thích, bao gồm các giả định bạn đã thực hiện.
Toby Speight
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.