2012-12-11 55 views
0

我使用下面的函數使用關鍵事件

function only_numeric(e) 
    { 
     var keynum; 
     var keychar; 
     var numcheck; 
     if(window.event) // IE 
     { 
      keynum = e.keyCode; 
     } 
     else if(e.which) // netscape/Firefox/opera 
     { 
      keynum = e.which; 
     } 
     //condition for backspace(music) Key 
     if(keynum != 8) 
     { 
      keychar = String.fromCharCode(keynum); 
      //numcheck = /\d/; 
      numcheck = /[.0-9]/; 
      return numcheck.test(keychar); 
     } 
     else 
     { 
      return true; 
     } 
    } 

我叫在輸入框上面的功能檢查上的按鍵數量不工作時,Tab鍵事件,

<input required="" onkeypress='return only_numeric(event,this.id)' type="text" name="test1" id="test1" /> 


<input required="" onkeypress='return only_numeric(event,this.id)' type="text" name="test2" id="test2" /> 

的驗證號碼功能工作精細。我需要使用tabkey代碼(9)等相同的像退格鍵碼8.如果我在only_numeric功能

... 

    if(keynum != 8 || keynum != 9) 
       { 

.... 

標籤的功能不能正常工作使用的代碼等的下方。我在這裏做錯了什麼?

+2

使用'&&'而不是'||'。 'x!= a ||當a!= b'時,x!= b'始終爲真。 – JJJ

+0

'keynum'永遠不會是'8'或'9'(儘管這在不同的瀏覽器中會有所不同),只有當擊中「可打印鍵」時,onkeypress纔會觸發事件。 'onkeyup'或'onkeydown'也檢測其他鍵,如'tab'或'backspace'。 – Teemu

回答

0

肯定。我終於得到了輸出,我修改了我的功能,如下所示:

function only_numeric(e) 
    { 
     var keynum; 
     var keychar; 
     var numcheck; 
     if(window.event) // IE 
     { 
      keynum = e.keyCode; 
     } 
     else if(e.which) // netscape/Firefox/opera 
     { 
      keynum = e.which; 
     } 

     var tabkey = e.keyCode; 

     if(keynum == 8 || tabkey == 9 || tabkey == 37 || tabkey == 39) 
     { 
        return true; 
     }   

     else 
     { 
      keychar = String.fromCharCode(keynum); 
      //numcheck = /\d/; 
      numcheck = /[.0-9]/; 
      return numcheck.test(keychar); 
     } 
    } 
1

您需要修改您的條件才能退出退格選項卡。使用的&&代替||

if(keynum != 8 && keynum != 9) 

另外我想簡單地重新排列你的情況類似下面,

if(keynum == 8 || keynum == 9) /* and more keys to escape*/ 
    { 
     return true; 
    } 
    else 
    { 
     keychar = String.fromCharCode(keynum); 
     //numcheck = /\d/; 
     numcheck = /[.0-9]/; 
     return numcheck.test(keychar); 
    } 
+0

對於我來說,tabkey顯示的keynum值始終爲「未定義」。但對於退格keynum值是8.是否有任何理由爲tabkey值是未定義的? –