2014-10-29 2 views
0

У меня есть datepicker на ранее заданное поле даты. Я пытаюсь сделать это больше не требуемым, но я не вижу, как это сделать.Как я могу сделать эту дату опцией в проверке jQuery?

Форма использования: jQuery Validation. Я вижу, что есть обязательный атрибут, который вы можете установить на false, но ошибка все еще сохраняется. Вот код, я использую:

setUpValidationForDates: function() { 
    $('input.datepicker').each(function(i, el) { 
    $.validator.addMethod('sDateFormat', function(value, element, param) { 
     return String(value).match(/^[0-9]{4}-[0-9]{2}-[0-9]{2}/); 
    }, 'Must have format YYYY-MM-DD'); 
    $(el).rules('add', { 
     required: false, 
     sDateFormat: true, 
     validDateString: true, 
    }); 
    }); 
} 

Сообщение видели о «Должен иметь формат YYYY-MM-DD» показывает, когда поле пусто. Мне нужно его проверить, присутствует ли значение, но разрешить пустые значения. Как я могу выполнить это, если требуется: false, похоже, не работает так, как я ожидал.

Благодаря

ответ

1

Вы написали свой собственный метод, как если бы это поле было required ... вот почему вы получаете сообщение об ошибке, пока поле остается пустым.

Вы должны были бы добавить this.optional(element) || к пользовательскому следующему способу ...

$.validator.addMethod('sDateFormat', function(value, element, param) { 
    return this.optional(element) || String(value).match(/^[0-9]{4}-[0-9]{2}-[0-9]{2}/); 
}, 'Must have format YYYY-MM-DD'); 

Теперь пользовательский метод не сработает, если что-то не будет введен в соответствующее поле.

Это изменение настраиваемого метода просто делает его «необязательным». Другими словами, если вы позже хотели, чтобы поле было required, просто добавьте required: true в объявление правила, не касаясь этого настраиваемого метода.


Во-вторых, вам нужно всего лишь объявить addMethodраз создать новый метод. Его следует вынуть из вашего .each(), поскольку его излишне многократно вызывают. Вы также можете удалить required: false, поскольку это уже по умолчанию правило required.

setUpValidationForDates: function() { 

    $.validator.addMethod('sDateFormat', function(value, element, param) { 
     return this.optional(element) || String(value).match(/^[0-9]{4}-[0-9]{2}-[0-9]{2}/); 
    }, 'Must have format YYYY-MM-DD'); 

    $('input.datepicker').each(function(i, el) { 
     $(el).rules('add', { 
      // required: false, // don't need this anymore, it's default 
      sDateFormat: true, 
      validDateString: true 
     }); 
    }); 

} 
+0

Отличная обратная связь. Спасибо за советы по рефакторингу всего. Мне удалось решить проблему - я ценю вашу помощь. Также выясняется, что 'validDateString' - это метод проверки, определенный в совершенно другом файле, который также обеспечивает обязательное поле. Я не знал об этом, пытаясь привыкнуть к новой кодовой базе! –

0

Проверьте, если значение равно нулю, прежде чем он действует с регулярным выражением. return true, если null. Или вы можете обновить свое регулярное выражение, чтобы включить пробел, чтобы он по-прежнему считался действительным, если он содержал только пустую строку.

+0

Я заменил регулярное выражение с этим: 'Строка возврата (значение) .match (/^([0-9] {4} - [0-9] {2} - [0-9] {2 }) |^$ /); '(что я считаю правильным) - все еще приводит к ошибке. Я думаю, что это привлекло к моему вниманию вторую проверку, применимую к тому же полю по какой-то причине. –

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