你不會是能夠做到這一點優雅地只使用keyup
,由於同時還在鍵入句子的過程中,你剛剛輸入的空間(有意它是在中間)在最後。
相反,我會做這樣的事情:
$('#dsTest').keyup(function() {
if (this.value.match(/[^a-zA-Z0-9 ]/g)) {
this.value = this.value.replace(/[^a-zA-Z0-9 ]/g, '');
}
});
$('#dsTest').focusout(function() {
this.value = this.value.trim();
});
允許同時打字過程中需要鍵入空格,並在一些合理稍後剝離與String.trim()
的開頭和結尾的空格。在我的例子中,我使用了.focusout()
,但您也可以在消耗該值時進行修剪。
這是一個更廣泛類別的驗證問題的例子,其中輸入測試WHILE輸入可以防止用戶輸入一個完成後合法的值 - 因爲一次輸入一個字符的值需要該值暫時具有無效狀態。有處理這一問題的方式主要有兩種:
- 不要測試驗證,直到用戶完成輸入值,而
- 標誌無效值不是改變他們
您還可以結合例如,這兩個字段在用戶鍵入時突出顯示該字段,以顯示當前值是無效的,然後修復該值使其在離開字段時仍然有效,而無效值仍然存在。
根據@ S-McCrohan提出的觀點,理解爲什麼檢查是在keyup上完成會有幫助。 – lps