2010-07-13 36 views
3

我需要檢測用戶是否按下了數字鍵盤上的點鍵。我寫這爲我的作品初稿:​​從數字鍵盤檢測十進制(點)鍵

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head><title></title> 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> 
<script type="text/javascript"><!-- 
(function($){ 
    var knownCodes = [ 
     [110, 46], // Firefox, IE, Chrome 
     [78, 46] // Opera 
    ]; 
    var pressedCodes = [null, null]; 

    $.fn.comma = function(){ 
     this.live("keydown", function(e){ 
      pressedCodes = [e.which, null]; 

     }).live("keypress", function(e){ 
      pressedCodes[1] = e.which; 

      for(var i=0, len=knownCodes.length; i<len; i++){ 
       if(pressedCodes[0]==knownCodes[i][0] && pressedCodes[1]==knownCodes[i][1]){ 
        $("#log").append("<li>Decimal key detected</li>"); 
        break; 
       } 
      } 
     }); 

     return this; 
    }; 
    $(function(){ 
     $('<ol id="log"></ol>').appendTo("body"); 
    }); 
})(jQuery); 

jQuery(function($){ 
    $(".comma input:text, .comma textarea").css("border", "1px solid black").comma(); 
}); 
//--></script> 
</head> 
<body> 

    <form action="" method="get" class="comma" size="20"> 
     <p><input type="text"></p> 
     <p><textarea rows="3" cols="30"></textarea></p> 
    </form> 

</body> 
</html> 

但是,我只能用西班牙語鍵盤測試它在Windows XP框。我的問題是:

  1. 安全地閱讀e.which?我正在使用它,因爲e.keyCodee.charCode至少在一個瀏覽器中返回undefined

  2. 操作系統是否以某種方式影響這些數字代碼,或者它只是瀏覽器的東西?

  3. 這些代碼是否依賴於鍵盤佈局?


背景信息:我無法找到一個jQuery插件remap numeric keypad所以我寫我自己。

更新

我會解釋我的確切需要。具有數字小鍵盤的西班牙語鍵盤具有.鍵。但是,西班牙語中的小數點分隔符是,。這使得在Web應用程序中輸入數字變得煩人。某些桌面應用程序(如MS Excel)會重新映射此密鑰,以便插入逗號。我試圖模仿這一點。

我已經改編了一個我用來在這裏發佈的腳本。這就是我得到的knownCodes陣列值:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head><title></title> 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> 
<script type="text/javascript"><!-- 
(function($){ 
    $.fn.showKeyCodes = function(){ 
     var log = function(e){ 
      $("<li></li>").text(e.type + "(): [keyCode, charCode, which]=[" + e.keyCode + ", " + e.charCode + ", " + e.which + "]").appendTo("#log"); 
     } 

     this.live("keydown", function(e){ 
      log(e); 

     }).live("keypress", function(e){ 
      log(e); 

     }).live("keyup", function(e){ 
      log(e); 

     }); 

     return this; 
    }; 
    $(function(){ 
     $('<ol id="log"></ol>').appendTo("body"); 
    }); 
})(jQuery); 

jQuery(function($){ 
    $(".showKeyCodes input:text, .showKeyCodes textarea").css("border", "1px solid black").showKeyCodes(); 
}); 
//--></script> 
</head> 
<body> 

    <form action="" method="get" class="showKeyCodes" size="20"> 
     <p><input type="text"></p> 
     <p><textarea rows="3" cols="30"></textarea></p> 
    </form> 

</body> 
</html> 

輸入您的數字小鍵盤.鍵(或其它關鍵它將替換你的鍵盤佈局),並對應於相同的字符在字母鍵盤的鍵。目標是檢測您點擊第一個而不是第二個。

+1

附註:我希望你不需要這個鍵做的事情,因爲我的鍵盤上沒有一個數字鍵盤:) http://www.apple.com/keyboard/ – 2010-07-13 09:47:04

+0

我希望它插入一個昏迷,這是西班牙語中的有效小數點分隔符。如果你沒有鍵盤,你沒有問題,我正在努力解決:) – 2010-07-13 10:03:18

回答

1

你的代碼在我的結尾沒有做任何事情,所以我會說它可能取決於鍵盤佈局。快速檢查確認我的芬蘭qwerty鍵盤上的輸出是鍵碼44,而不是預期的46.

+0

嗯...我得到'[keyCode,charCode,] = [0,44,44]'與我的定期昏迷的關鍵。您的完成鍵盤是否具有彗星鍵? – 2010-07-13 10:01:37

+0

Keydown:數字110,110,普通逗號188,0,188。在按鍵:44,44,44的數字和普通逗號 – 2010-07-13 11:00:36

2

從e.which閱讀安全嗎?

通常在IE沒有,你只能得到keyCode(雖然keypress它實際上是一個字符代碼不是關鍵代碼)。您的代碼可以讀取which,因爲幕後jQuery將值複製到IE上的which。沒有jQuery,你需要屬性嗅探代碼來知道選擇哪一個。 (你不能總是在keypress閱讀keyCode,因爲它不能保證提供和它的0在Firefox。)

請注意我不想檢測字符:我想檢測的關鍵。

你不能在keypress中這樣做,它只給你一個字符代碼(46,ASCII爲.)。您將不得不陷入​​,這使您可以訪問真實的密鑰代碼(在keyCode屬性中,以及在不屬於IE的瀏覽器中,在which中)。

keyCode報告的數字鍵盤./,按鈕爲110(ASCII爲小寫字母N)。除了歌劇,它是78,大寫N的ASCII,因此與按下N按鈕無法區分。

所以你可以聲稱​​事件並存儲一個標誌,當鍵110或78被壓下,然後要求keypress。如果設置了最後​​的標誌,並且whichcharCode)屬性爲46,return false以防止按鍵通過,然後在焦點處插入,。 (如果一次按下多個鍵並且自動重複正在進行,這並不十分可靠。)

請注意,在焦點處插入字符本身並不重要;看到很多以前的問題。您需要爲IE(document.selection.createRange().text=...)和其他現代瀏覽器(根據selectionStart/selectionEnd更改輸入的value)的分支代碼。老年人和移動或小衆瀏覽器可能不支持任何一種編輯方法,因此如果您無法做到這一點,請檢查缺少這些屬性並將鍵盤留在一邊。

操作系統是否以某種方式影響這些數字代碼,或者它只是瀏覽器的東西? 這些代碼是否依賴於鍵盤佈局?

一般來說,雖然不會影響你的方式。關鍵事件通常仍然是巨大的跨瀏覽器,跨鍵盤和跨平臺的變量;如果可以的話,他們最好避免。

就我個人而言,我認爲正確的解決方案,像西班牙的小數點小數點的糟糕的鍵盤佈局選擇將是使用MSKLC修改佈局。