jQuery Подтвердить Требуется Выбрать


146

Я пытаюсь проверить выбор HTML-элемента с помощью плагина jQuery Validate. Я установил для «требуемого» правила значение true, но оно всегда проходит проверку, поскольку по умолчанию выбирается нулевой индекс. Есть ли способ определить пустое значение, которое используется обязательным правилом?

UPD. Пример. Представьте, что у нас есть следующий элемент управления HTML:

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

Я хочу, чтобы плагин валидации использовал значение по умолчанию как пустое.


Поместите фрагмент кода, чтобы мы могли помочь.
Ли

Ответы:


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.");
Пабло С.Г. Пачеко

11
Чтобы помочь будущим читателям: Где указано SelectName, это означает значение атрибута name, а не значение атрибута id. Это немного сбивает с толку, поскольку при работе в JS обычно работает с идентификатором, а не с именем. См. Документацию здесь : «правила (по умолчанию: правила считываются из разметки (классы, атрибуты, данные)) Тип: Объект Пары ключ / значение, определяющие пользовательские правила. Ключ - это имя элемента»
Дрор

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
Это не должен быть принятый ответ, потому что оригинальный постер специально просит использовать «правила», которые являются опцией, которая передается в конструктор проверки, а не присутствует в разметке. Иногда вы не можете позволить себе роскошь изменять разметку. (И лично я просто предпочитаю не помещать логику в разметку.)
Мейсон Хоутз

3
@MasonHoutz это все еще логика в разметке, ожидает ли логика значение = "" или значение = "по умолчанию"
billrichards


30

использовать минимальное правило

установите значение первой опции на 0

'selectName':{min:1}

Первое значение фиксировано (есть некоторая логика бэкенда против этого значения)
SiberianGuy

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. Вместо работы с атрибутом value = "default" в параметре тега отключите параметр по умолчанию или установите значение = "", как это было предложено 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: решение Эндрю Коутса работает, только если у вас есть только один выбор в вашей форме. Если вы хотите, чтобы его решение работало более чем с одним выбором, добавьте атрибут name к вашему выбору.

Надеюсь, поможет! :)


1
Короче говоря, добавьте requiredатрибут к <select>тегу и добавьте disabledатрибут к первому <option>тегу (или selectedатрибуту с атрибутом, если он есть)
Стивен,

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
Хотя этот фрагмент кода может решить вопрос, в том числе объяснение действительно помогает улучшить качество вашего сообщения. Помните, что вы отвечаете на вопрос читателей в будущем, и эти люди могут не знать причин, по которым вы предлагаете код. Также постарайтесь не переполнять ваш код пояснительными комментариями, это снижает удобочитаемость кода и пояснений!
Филнор

1

Все просто, вам нужно получить значение поля Select, и оно не может быть «по умолчанию».

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

1

Решение упоминается @JMP работал в моем случае с небольшим изменением: я использую element.valueвместо valueв 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!" }
    }  
});

Вполне возможно, что у меня есть особый случай, но я не нашел причину. Но решение @ 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
Добро пожаловать в стек переполнения! Спасибо за этот фрагмент кода, который может предоставить некоторую ограниченную краткосрочную помощь. Правильное объяснение значительно улучшило бы его долгосрочную ценность, показав, почему это хорошее решение проблемы, и сделало бы его более полезным для будущих читателей с другими, похожими вопросами. Пожалуйста, измените свой ответ, чтобы добавить некоторые объяснения, в том числе предположения, которые вы сделали.
Тоби Спейт
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.