2011-11-28 99 views
2

我有一個JavaScript函數,以確保用戶只有類型數字。
我用onkeypress="return onlyNumbers(event, 'MaxRate', 1300, 62500);"應用onkeypress後獲取字段值

function onlyNumbers(evt, id, value, maxRange) 
{ 
    var e = event || evt; // for trans-browser compatibility 
    var charCode = e.which || e.keyCode; 

    var answer = false; 
    if (charCode > 31 && (charCode < 48 || charCode > 57)) 
     return false; 

    // if user provided id 
    if(id) 
    { 
     // we obtain the new value 
     var newValue = ((document.getElementById(id).value) + String.fromCharCode(charCode)); 
     // we check for range limits 
     if(maxRange && newValue > maxRange) 
     { 
      return false; 
     } 

     // we check to see if value has changed, therefore we will highlight text 
     if(value) 
     { 
      highlight_text_on_change(id, value, newValue); 
     } 
    } 

    return true; 
} 

function highlight_text_on_change(id, value, newValue) 
{ 
    if(newValue) 
    { 
     if(newValue == value) 
     { 
      document.getElementById(id+'_name').style.color = ''; 
     } 
     else 
     { 
      document.getElementById(id+'_name').style.color = 'red'; 
     } 
    } 
    else 
    { 
     if(document.getElementById(id).value == value) 
     { 
      alert("UnHighlighting text"); 
      document.getElementById(id+'_name').style.color = ''; 
     } 
     else 
     { 
      alert("Highlighting text"); 
      document.getElementById(id+'_name').style.color = 'red'; 
     } 
    } 
    return true; 
} 

的功能首先是驗證檢查,看看用戶是否按下數字鍵,然後如果數字鍵的值已經改變,那麼文本有叫它id+'name'將文本顏色更改爲紅色,表示它已更改。我唯一的問題是,假設文本字段的默認值是1300,如果用戶鍵入6,則值更改爲13006或13060或13600或16300或61300並且字段高亮顯示,但如果用戶之後按退格鍵,則該字段不會高亮顯示,因爲退格操作不會正確註冊。有沒有什麼辦法,我可以知道確切地說,用戶按下退格鍵,或者在不檢查文本字段的情況下獲得新形成的值,直到我檢查到新值有效?

回答

2

按下按鍵後,使用按鍵事件檢測字段的值並不好。改用密碼。

Keypress事件將在您按下按鍵後觸發,但之前將數據註冊到該字段中。 http://jsfiddle.net/yymEH/

+0

這使得它更加古怪:按後的數據被註冊到領域,也算退格

測試這裏的關鍵,但

KeyUp事件將被解僱。現在連字母都會被接受。但謝謝你的jsfiddle,我將在那裏練習 – Quillion

+0

數字過濾器必須在onkeydown,然後做一個返回false如果NaN –

+0

謝謝幫助我。讓我永遠得到這個權利。 – Squirrl