2013-02-21 47 views
0

我正在使用knokcout.js和knockout.validation插件。我的代碼中存在驗證消息。我申請2驗證上觀察到的領域(比如密碼),如:錯誤的驗證消息是通過敲除顯示?

在JS代碼

.. 
this.Password = ko.observable().extend({ 
     required: { message: "Enter password" }, 
     minLength: { params: 6, message: "Must be 6 chars long" } 
}); 
.. 

在HTML中

<input type="password" data-bind="value: Password, valueUpdate:'afterkeypress" 
    placeholder="Password" /> 

現在我的問題是,當我進入單個字符提交的密碼比而不是顯示驗證消息(Must be 6 chars long)它顯示我的消息(Enter password)並比當我輸入第二個字符在fie ld比它顯示我的消息(Must be 6 chars long)。這種行爲是與我應用驗證的所有領域。任何人都可以告訴我問題在哪裏?

+0

用onBlur事件替換afterkeypress事件檢查它。 – akeeseth 2013-02-21 06:01:32

+0

我已經用keypress,keyup和onBlur檢查過了,但沒有工作 – gaurav 2013-02-21 06:09:24

回答

1

該代碼似乎是對'按鍵'而不是'afterkeypress'作出反應。您在示例html中的'afterkeypress'後缺少單引號。

該文檔沒有真正列出'afterkeypress'作爲updateValue選項,但它在我的測試中確實有效。

From documentation for value binding

如果您還結合包含一個名爲valueUpdate參數,這 定義了額外的瀏覽器事件KO應該用它來檢測變化 除了改變事件。以下字符串值是最 很常用的選擇:

  • 「KEYUP」 - 更新您的視圖模型當用戶釋放的關鍵
  • 「按鍵」 - 當用戶輸入的鍵更新您的視圖模型。與按鍵不同,當用戶按下按鍵時,此功能會重複更新。
  • 「afterkeydown」 - 只要用戶開始輸入字符,就會更新您的視圖模型。這通過捕獲瀏覽器的keydown事件 並異步處理事件來工作。

這些選項中,「afterkeydown」是最好的選擇,如果你想 保持您的視圖模型實時更新。

該文件建議使用'afterkeydown'的選擇最好的結果,我發現情況是如此。

我創建了一個使用'keypress','afterkeypress'和'afterkeydown'的示例。

見:http://jsbin.com/anerop/3/edit(validatedObservable;注:點擊 「與JS運行」 按鈕)

綁定到 'afterkeydown' 似乎提供最佳的用戶體驗。 'afterkeypress'不會更新,直到控件失去焦點。

採樣數據綁定:

<input type="password" data-bind="value: Password, valueUpdate:'afterkeydown'" 
    placeholder="Password" /> 

我創建了沒有使用validatedObservable另一個例子,得到了類似的結果。

見:http://jsbin.com/itatic/1/edit(不validatedObservable;注:點擊按鈕 「與JS運行」)

相關問題