2016-08-07 3 views
0

У меня есть форма, которую я проверяю с помощью плагина validator jQuery. В пределах формы у меня есть одно поле, которое будет, в зависимости от ввода другого поля, обязательным или нет. ТребованиеjQuery Подтверждение неверно верно

<select name="supportiveServices" id="supportiveServices" style="float: left; margin-left: 20px; width: 30%;"> 
     <option value="">Select One</option> 
     <option value="Accepted">Accepted</option> 
     <option value="Declined">Declined</option> 
    </select> 


<input name= "serviceStartDate" id= "serviceStartDate" type="date" style="width: 50%;"></input> 

JQuery

serviceStartDate: { 
      required: function(element) { 
       if($("#supportiveServices").val() == 'Accepted') { 
        return true; 
       } 
       else { 
        return false; 
       } 
      }, 

     }, 

Эта зависимость, кажется, работает нормально, но проблема я постоянно бегу в меня, что мне нужно дату к действительным, а также. Я добавил метод, гарантирующий, что даты действительны.

jQuery.validator.addMethod("DateFormat", 
    function(value, element) { 
    return value.match(/^\d\d?\/\d\d?\/\d\d\d\d$/); 
}, 
    "Please enter a date in the format dd/mm/yyyy"; 
); 

Я новичок в этом плагине, но я попытался следующие два решения, оба из которых возвращают истинны и требуют ввода:

  1. Создание функции, которая в основном возвращает истину, если дата пуста и false, если нет.

    serviceStartDate: { 
         required: function(element) { 
          if($("#supportiveServices").val() == 'Accepted') { 
           return true; 
          } 
          else { 
           return false; 
          } 
         }, 
    
         DateFormat: function(element) { 
          if($("#serviceStartDate").val() != 0 || $("#serviceStartDate").val() != null || $("#serviceStartDate").val() != undefined || $("#serviceStartDate").val() != '') { 
           return true; 
          } else { 
           return false; 
          } 
         } 
    
        }, 
    
  2. Создайте отдельный метод.

    jQuery.validator.addMethod("DateFormatSupport", 
         function(value, element) { 
         if ($("#serviceStartDate") == 0) { 
         return value.match(/^\d\d?\/\d\d?\/\d\d\d\d$/); 
         } 
        }, 
        "Please enter a date in the format dd/mm/yyyy"//removed ; 
        ); 
    

и назвав его.

 serviceStartDate: { 
      required: function(element) { 
       if($("#supportiveServices").val() == 'Accepted') { 
        return true; 
       } 
       else { 
        return false; 
       } 
      }, 

      DateFormatSupport: true 
      } 

     }, 

я в основном нужно валидатор, чтобы гарантировать, что если клиент не выбирает «Принимаю» для вспомогательных услуг, то serviceStartDate может быть необязательным. Если выбрано «Принято» для вспомогательного обслуживания, то они должны будут заполнить serviceStartDate, и дата также должна быть действительной. В качестве меры предосторожности я хотел бы, чтобы они заполняли что-либо в serviceStartDate, независимо от того, является ли оно необязательным или нет, чтобы быть датой. Это происходит с базой данных, поэтому она должна быть либо нулевой, либо датой.

Любые советы?

+0

Вы пробовали правило 'date', которое уже встроено в плагин? – Sparky

ответ

0

Я хотел бы, если бы они заполнили что-либо в serviceStartDate, будь то опционально или нет, чтобы быть датой ... Любой совет?

Вы просто должны объявить встроенный date правило на вашем поле даты, в то время как делает required правило зависит от вашего select элемента, как вы уже сделали. В этой ситуации нет необходимости в настраиваемом правиле. Также нет необходимости делать правило date условным, поскольку все правила автоматически игнорируются всякий раз, когда поле необязательно остается пустым.

rules: { 
    supportiveServices: { 
     required: true 
    }, 
    serviceStartDate: { 
     required: function(element) { 
      return ($("#supportiveServices").val() == 'Accepted') ? true : false; 
     }, 
     date: true 
    } 
} 

Работа DEMO: jsfiddle.net/y1Lytetm/

ПРИМЕЧАНИЯ:

  • Я ternary shorthand для вашего условного ... это одна строка кода вместо шести.

  • Там нет такого понятия, как inputконтейнер элемент, так что я удалил свой заключительный </input> тег, который не существует в качестве действительного HTML.

Смежные вопросы