JQuery проверить элегантную условную логику - PullRequest
2 голосов
/ 16 августа 2011

Я проверяю форму с помощью плагина проверки jQuery (требуется использование плагина, так как у меня есть другие функции, которым нужен плагин).Он имеет следующие поля:

phoneNumber firstName lastName city zip

Форма считается действительной, если выполняется одно из следующих утверждений:

  • phoneNumber действителен
  • firstName lastName city все действительны
  • firstName lastName zip действительны

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

Ответы [ 3 ]

2 голосов
/ 16 августа 2011

Элегант в глазах смотрящего ...

Я бы порекомендовал создать собственный валидатор для обработки трех ваших случаев.

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

Я обнаружил еще одну публикацию о переполнении стека, которая лучше иллюстрирует создание пользовательских валидаторов ... Мне особенно нравится эта строка jQuery.validator.methods['date'].call(this,value,element), так как кажется, что вы можете использовать встроенные валидаторы в вашем пользовательском коде. jQuery Validate Plugin - Как создать простое пользовательское правило?

Вот ресурсы, которые я использовал при изучении проверки: http://www.ferdychristant.com/blog//articles/DOMM-7LZJN7 // статья, подробно описывающая, как действительно использовать validate. http://www.ferdychristant.com/blog//pages/jQuery%20validation%20code
http://randomactsofcoding.blogspot.com/2008/10/starting-with-jquery-how-to-write.html
http://docs.jquery.com/Plugins/Validation/Methods/required#dependency-expression

Существует также удивительная глубина информации просто в http://docs.jquery.com/Plugins/Validation ... вам просто нужно просмотреть все это!

ниже вы также увидите, что можете поместить javascript прямо в раздел правил.

$(document).ready(function() {

$("#EmailUserEditFormId").validate({

    debug: true, //this lets it hit firebug
    onkeyup:false, //keep the traffic down for my async call

    rules: {

        username: {
            required: (jQuery('input#username:disabled').length==1)?false:true, //example of JS in a rule
            usernameCheck: (jQuery('input#username:disabled').length==1)?false:true //example of a JS rule with a custom validator 
        }
    },

    messages: {
        username: {
            required: "Please enter a unique username.",
            usernameCheck: "Username is already in use. Choose another."
        }
    }

});

});

... и это был мой простой пользовательский валидатор.

jQuery.validator.addMethod('usernameCheck', function(username) {
var postURL = "CheckUsername";
$.ajax({
    cache: false,
    async: false,
    type: 'POST',
    data: 'username=' + username,
    datatype: 'xml',
    url: postURL,
    success: function(xml) {
        unique = (jQuery(xml).find('unique').text() == "true") ? true : false;
    }
});
return unique;

}, '');

0 голосов
/ 16 августа 2011
 function formIsValid(){
   if(phoneNumberIsValid) { return true; }
   if(firstNameIsValid && lastNameIsValid) {
     return (cityIsValid || zipIsValid);
   }
   return false;
 }

Если вам нравятся однострочники и вам не важны читабельность:

return (phoneNumberIsValid || (firstNameIsValid && lastNameIsValid && (cityIsValid || zipIsValid)));

Если у вас есть плагин для условного сопоставления с шаблоном , что-то подобное может быть более читабельным, если вы к нему привыкли

return match([phoneNumberValid, firstNameValid, lastNameValid, cityValid, zipValid],
[true, _], true,
[_, true, true, true, _], true,
[_, true, true, _, true], true,
_, false);
0 голосов
/ 16 августа 2011
phoneNumberValid, firstNameValid, lastNameValid, cityValid, zipValid;
if ((phoneNumberValid) || (firstNameValid && lastNameValid && (cityValid || zipValid)) {
    //Form Is Valid
}

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

Не думаю, что такую ​​сложную проверку можно выполнить только с помощью плагина проверки jQuery.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...