2014-07-07 2 views
0

간단한 로그인 페이지를 사용하여 로그인 및 암호를 캡처하고 있습니다. 사용자가 비밀번호 찾기 버튼을 클릭하는 동안 로그인 텍스트 상자 만 유효성을 검사합니다.KO 유효성 검사 그룹 오류

초기 페이지로드에서 잘 작동합니다. 처음에는 내가 사용자 ID를 비워 유지하고 비밀 번호를 잊어 버렸을 때 유효성 검사 오류가 발생하고 내가 그 오류 개체에서 null 값을 여전히 수정하면. 이 null 값의 출처를 모르겠습니다.

내 코드에 따라

자바 스크립트

var loginModule = (function() { 
$(document).ready(function() { 

    var userName = $('input:text[name=username]').val(); 
    var password = $('input:text[name=password]').val(); 

    ko.validation.registerExtenders(); 
    ko.validation.init(); 
    ko.applyBindings(new viewmodel(userName, password)); 

}); 



var viewmodel = function (username, password) { 

    var self = this; 

    self.UserName = ko.observable(username).extend({ required: { message: 'User Id is required.' }, minLength: 5, maxLength: 10 }); 

    self.Password = ko.observable(password).extend({ required: { message: 'Password is required.' }, minLength: 5, maxLength: 10 }); 

    self.forgotPassword = function() { 

     var fperrors = ko.validation.group(self.UserName, { deep: false}); 

     if (fperrors().length > 0) { 

      $('#errorMsg').show(); 

      fperrors.showAllMessages(); 

     } 

     else { 

      //valid code 

     } 

    }; 
}; 

return { 
    viewmodel: viewmodel 

} 

})(); 

내가 변경하는 경우 VAR fperrors = ko.validation.group (self.UserName, {깊은 : 거짓}) ;

~ var fperrors = ko.validation.group (self.UserName(), {deep : false}));

전혀 오류가 발생하지 않습니다.

HTML 마크 업

<P> 

<p> 

<span class="error" data-bind='visible: UserName.hasError, text: UserName.validationMessage'></span> 

</p> 

<LABEL class="field-label" for="User-id">User ID/alias<EM class=mandatory>*</EM></LABEL><input id="User-id" name="username" class=field-stretch data-bind='value:UserName, valueUpdate: "afterkeydown"' 

         type="text" value="" /></P> 

<P> 

<p><span class="error" data-bind='visible: Password.hasError, text: Password.validationMessage'></span></p> 

<LABEL class=field-label for=Password>Password<EM class=mandatory>*</EM></LABEL> <input id="Password" name="password" class=field-stretch data-bind='value:Password, valueUpdate: "afterkeydown"' type="password" value="" /></P> 

<P class="text-left btn-wrap"><INPUT class="btn-primary" data-bind='click:submit' value="Logon" type=submit> &nbsp; <INPUT data-bind='click:forgotPassword' class=btn-primary value="Forgotten password?" type=submit> </P> 

어떤 사람은 무슨 잘못이 지원할 수 있습니까? 하지만 내 테스트에서 나는 그것이 작동하도록하기 위해 배열로 관찰을 통과했다 왜

+2

당신이 당신의 HTML을 보여줄 수 있습니까? –

답변

1

잘 모르겠어요 :

var fperrors = ko.validation.group([self.UserName], { deep: false}); 

http://jsfiddle.net/LHy6h/

+0

감사합니다. 정상적으로 작동합니다. 왜 내가 observable을 배열로 전달해야하는지 확신 할 수 없다. – Bumble