2012-02-21 58 views
1

我有一個很奇怪的問題。這裏是我當前的Javascript:如何在設置輸入值之前驗證輸入?

jQuery('.highlightableTDCell input').keydown(function() { 
    var val = jQuery(this).val(); 
    if (!GridView.prototype.validateStandardCellNumberFormat(val)) { 
     return false; 
    } 
    else return true; 
}); 

當我用這個,我仍然可以逃脫輸入非法字符,但僅此而已。我很困惑,因爲我認爲這會首先發生。

+1

提示:'this.value' =='的jQuery(這).VAL()'沒有需要創建jQuery對象來獲取值。 – gdoron 2012-02-21 17:19:47

+1

我真的很困惑你的實際問題。 「我以爲這會先發生?」,你是什麼意思? – Purag 2012-02-21 17:37:14

回答

1

在keydown事件內部,element.value尚未更新,以說明當前正在按下的鍵。如果你想停止鍵入輸入框,你需要詢問事件,看看它是否是你想要允許或不允許的鍵。

0

新的內容進入輸入之前的事件引發

您可以使用這樣的事情,以獲得新的內容(讓你取消默認行爲。):

$('.highlightableTDCell input').keypress(function(e){ 
    var temp = this.value + String.fromCharCode(e.which) 

    return GridView.prototype.validateStandardCellNumberFormat(temp) 
}); 

注意這並不完全證明。例如當用戶在輸入中間輸入新的字符時。

只應在blur上進行驗證。使用HTML5應該會更好,但並非所有瀏覽器都支持它。

  • 提示:this.value == jQuery(this).val()沒有必要創建jQuery object來獲取值