2016-09-17 3 views
2

Я использую jQuery Validate plugin в моем приложении Grails, Вот код из GSP для проверки:JQuery Validation equalTo не работает с Grails

<script type="text/javascript"> 

    $(document).ready(function() { 
     $('.save').attr('disabled', true); 
     jQuery.validator.addMethod("noSpace", function(value, element,e) { 

     return value.indexOf(" ") < 0 && value != ""; 
      }, "${message(code:'sherif.jqueryValidation.nospaces')}"); 


    $('#myForm').validate({ 

     errorElement: "label", 
     errorClass:'error', 
     success: function() { 
     $('.save').attr('disabled', false); 
     }, 
     rules : 
      { 
      username:{required : true,noSpace:true}, 
      password :{required : true,noSpace:true}, 
      confirmPassword:{required : true,noSpace:true,equalTo:"#password"}, 
      contactNumber: { required : true, number:true}, 
      email:{required:true , email:true} 
      } 
    , 
     messages : { 
      username:{required :"${message(code:'sherif.jqueryValidation.required')}"}, 
      password : {required :"${message(code:'sherif.jqueryValidation.required')}"}, 
      email:{required :"${message(code:'sherif.jqueryValidation.required')}" , email:"${message(code:'sherif.jqueryValidation.invalidemail')}"}, 
      confirmPassword: {required :"${message(code:'sherif.jqueryValidation.required')}" , equalTo:"${message(code:'sherif.jqueryValidation.passwordmatch')}"}, 
      contactNumber: { required : "${message(code:'sherif.jqueryValidation.required')}", number:"${message(code:'sherif.jqueryValidation.numberonly')}"} 
    } 

    }); 
}); 
</script> 

Все валидация работает отлично, за исключением equalTo проверки, хотя два поля пароля имеют одинаковое значение. Я получаю ошибку password doesn't match.

Вот Пароль поле:

<div class="row form-group"> 

    <div class="fieldcontain ${hasErrors(bean: usersInstance, field: 'password', 'error')} required"> 
    <div class="col-sm-2 "><label for="password"> 
     <g:message code="users.password.label" default="Password" /> 
     <span class="required-indicator">*</span> 
    </label> 
    </div> 
    <div class="col-sm-10"> <g:passwordField style = "width:40%;" class="form-control input" name="password" required="" value="${usersInstance?.password}"/> 
    </div> 
    </div> 
</div> 

<div class="row form-group"> 
<div class="fieldcontain ${hasErrors(bean: usersInstance, field: 'confirmPassword', 'error')} required"> 
    <div class="col-sm-3 "><label for="confirmPassword"> 
     <g:message code="users.confirmPassword.label" default="confirm Password" /> 
     <span class="required-indicator">*</span> 
    </label> 
    </div> 
<div class="col-sm-9"> <g:passwordField style = "width:40%;" class="form-control input" name="confirmPassword" required="" value="${usersInstance?.confirmPassword}"/> 
</div> 
</div> 
</div> 

есть все, что я пропустил, что может вызвать эту ошибку?

+0

Это помогло бы увидеть фактический ОКАЗАННЫХ HTML, то мы можем проверить, что поле 'name =" password "' содержит атрибут 'id =" password ". – Sparky

ответ

3

... хотя оба поля пароля имеют одинаковое значение, я получаю ошибку "password doesn't match".

Вы увидите это условие, если нет элемента, соответствующего #password.

equalTo: "#password" 

Ваш селектор #password ищет элемент, который содержит id="password". Если вы не можете добавить атрибут id к этому элементу, вы можете попробовать следующее, который будет соответствовать по name ...

equalTo: "[name='password']" 

DEMO: jsfiddle.net/68a9fkgt/

+0

какая глупая ошибка, мне кажется, мне нужен отдых – Sherif