2013-10-15 2 views
1

Я использую плагин jQuery Validator, который отлично работает. Я просто добавил еще один пользовательский метод, чтобы убедиться, что пароль содержит один номер или один специальный символ, который также отлично работает. Проблема в том, что когда это условие терпит неудачу (они просто вводят 6 символов текста), он никогда не выдает сообщение об ошибке «Ваш пароль должен содержать хотя бы одно число или специальный символ». Кто-нибудь знает, почему это было бы? Код ниже:jQuery Подтверждение пользовательского сообщения, которое не отображается для специального метода

jQuery.validator.addMethod("onespecial", function(value, element){ 
     var pattern = /^(?=.{6,})(?=.*[a-z])(?=.*[0-9])|(?=.*[[email protected]#$%^&*()-+=]).*$/; 

     return (pattern.test(value)); 

    }, "Your password must contain one number or special character"); 

    $("#activateForm").validate({ 
     rules: { 
      first_name: "required", 
      last_name: "required", 
      password: { 
       required: true, 
       minlength: 6, 
       onespecial: true 
      }, 
      pass_confirm: { 
       required: true, 
       minlength: 6, 
       equalTo: "#Password", 
       onespecial: true 
      }, 
      position: "required", 
      category: "required" 

     }, 
     messages: { 
      first_name: "Please enter your first name", 
      last_name: "Please enter your last name", 
      password: "Please enter a valid password", 
      pass_confirm: "Your passwords much match", 
      position: "Please select your position", 
      category: "Please select your category" 
     } 
    }); 

Update: С Markup

<div id="activate-form"> 
<h1>Welcome. We just need a little bit more information.</h1> 
    <form action="/" id="activateForm" method="post" novalidate="novalidate">  <div><input type="text" name="first_name" class="form-input" placeholder="First name" onfocus="this.placeholder=''" onblur="this.placeholder='First name'" id="FirstName"></div>  <div><input type="text" name="last_name" class="form-input" placeholder="Last name" onfocus="this.placeholder=''" onblur="this.placeholder='Last name'" id="LastName"></div>  <div><select name="category" class="form-input" id="Category"><option value="">Select category</option><option value="test">test</option><option value="test">test</option></select></div> 
    <div><select name="position" class="form-input" id="Position"><option value="">Select Position</option><option value="RA">RA</option></select></div> 
    <div><input type="password" name="password" class="form-input" placeholder="Password" onfocus="this.placeholder=''" onblur="this.placeholder='Password'" id="Password"></div>  <div><input type="password" name="pass_confirm" class="form-input" placeholder="Confirm password" onfocus="this.placeholder=''" onblur="this.placeholder='Confirm password'" id="PassConfirm"></div>  <div><input type="hidden" name="key" value="fff" id="Key"></div>   <input type="submit" value="Finish" class="button">  </form></div> 
+0

Просьба предоставить разметку HTML. – Sparky

+0

Можете ли вы воспроизвести проблему в JsFiddle? Иногда писать скрипку позволяет найти источник проблемы самостоятельно ... В качестве дополнительной заметки, пожалуйста, также учтите, что проверка Javascript не может считаться реальной валидацией. Проверка клиента выполняется для удобства пользователя (без обратного перехода к серверу), но валидация сервера является единственной допустимой. –

+0

** Когда вы редактируете свой вопрос SO, пожалуйста, также подтвердите его. ** Re: _ "Обновление: с помощью разметки Добро пожаловать. Нам просто нужно немного больше информации. Выберите категориюtesttest Выберите PositionRA" _ – Sparky

ответ

3

Вы не получаете сообщение от пользовательского метода, потому что вы наиважнейший всех сообщений об ошибках для password и pass_confirm с messages вариант ...

messages: { 
    first_name: "Please enter your first name", 
    last_name: "Please enter your last name", 
    password: "Please enter a valid password", // <-- overrides all messages 
    pass_confirm: "Your passwords much match", // <-- overrides all messages 
    position: "Please select your position", 
    category: "Please select your category" 
} 

Вы можете указать сообщение для каждого правила, то белый ru вы не укажете один для своего пользовательского метода, будет использовано сообщение, которое вы определили в пределах addMethod.

messages: { 
    first_name: "Please enter your first name", 
    last_name: "Please enter your last name", 
    password: { 
     required: "Please enter a valid password", 
     minlength: "Please enter a valid password" 
     // onespecial: "" // <-- message already defined within addMethod() 
    }, 
    pass_confirm: "Your passwords much match", 
    position: "Please select your position", 
    category: "Please select your category" 
} 

отметить также: Там нет необходимости дублировать все ваши правила для pass_confirm поля. Так как, независимо от того, что, оно должно всегда соответствовать полю ввода пароля, так что эти условия уже удовлетворены.

password: { 
    required: true, 
    minlength: 6, 
    onespecial: true 
}, 
pass_confirm: { 
    equalTo: "#Password", 
}, 

DEMO: http://jsfiddle.net/WZPcW/

0

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

Для меня вы overwiting сообщения и когда вы делаете что-то вроде этого:

messages: { 
    password: 
    { 
     required: "Please enter a valid password", 
     minlength: "Please enter a valid password" 
    } 
} 

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

EDIT: ничего себе, и снова я не видел ответов:/ Sparky написал все о вашей жертве.

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