2012-02-21 87 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来获取值