2013-10-24 3 views
2

Мне, должно быть, не хватает чего-то очевидного, но все, что я пробовал для этого, оставляет меня пустыми руками, поэтому я немного озадачен.плагин проверки правильности jQuery addMethod некорректно работает

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

Так, например, это работает без сучка и задоринки:

$.validator.addMethod("emailValidation", 
    function(value, element) { 
     return /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/.test(value); 
    }, 
    "Please enter a valid email address." 
); 
$.validator.addMethod("password", 
    function(value, element) { 
     return /[^\s]{6,25}/.test(value); 
    }, 
    "Please enter a password between 6 and 25 characters long." 
); 
... 
$(function(){ 
    $("#registrationForm").validate({ 
     rules: { 
      email: { 
       required: true, 
       emailValidation: true 
      }, 
      password: { 
       required: true, 
       password: true 
      }, 
     } 
    }); 
}); 

Оба пароля проверки и проверки электронной почты работу.

Но тогда я точно так же добавляю проверку валидации для имен. Итак, ниже, где метод пароля заканчивается, я добавляю:

$.validator.addMethod("name", 
    function(value, element) { 
     return /[^\s]{6,25}/.test(value); 
    }, 
    "Please enter a valid name." 
); 

Который превращает VALIDATE вызов в:

$(function(){ 
    $("#registrationForm").validate({ 
     rules: { 
      email: { 
       required: true, 
       emailValidation: true 
      }, 
      password: { 
       required: true, 
       password: true 
      }, 
      studentFirstName: { 
       name: true 
      } 
     } 
    }); 
}); 

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

Это смущает! Я добавил вызовы console.log ко всем методам, и действительно, это не то, что один из них вызывается за другим - единственный, вызываемый - это имя.

Я проверил и дважды проверил, что выбор элемента хорош. Я проверил, что все в порядке с самими методами. Есть идеи?

+1

Я не уверен, что «имя» является зарезервированным словом, но поскольку плагин использует атрибут «name» для отслеживания входных данных, возможно, вы должны использовать более творческие имена для своего настраиваемого метода. Другими словами, начинает ли он работать, если вы измените имя на другое? – Sparky

ответ

1

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

0

ОК, ответ был как-то очевидным и тривиальным, как я себе представлял.

«name» - ключевое слово плагина проверки правильности jQuery. Он защищен. Вы не можете его использовать. Как только я изменил имя метода, скажем, «validateName», все прошло без сучка и задоринки.

... Не могу поверить, что я потратил час на это.

Благодарим вас, Sparky, за ваше предложение.

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