• ベストアンサー

テキストエリアに入力可能な文字を半角数字に制限する方法を教えて下さい。

テキストフィールドに入力可能な文字を javascriptにより、 半角数字・左右のカーソルキー・バックスペースキー・デリートキー のみに限定しようと試みています。 半角数字は、メインキー最上段にある数字キーだけではなく、テンキーからも入力されることを前提としています。 【javascriptのソース】…ブラウザIEのみに対応の場合 function suujinomi(evt) { evt = window.event; txt = String.fromCharCode(evt.keyCode);   ...(1) if("0123456789abcdefghi\b\r\t.'`%\60".indexOf(txt,0) < 0) {  return false; ...(2) } else {  return true; } } 【テキストフィールドhtmlのソース】 <input type=text value="" onkeydown="return suujinomi(event)">  以下のようにな問題(1)、(2)を解決できず困っています。 (1) メインキーボードの最上段にある数字キーのシフトケースである  半角文字!"#$%&'()もテキストフィールドに入力でき、 (2) ブラウザIE以外のブラウザでは、次のようにステートメント(1)、(2)を書き換えてみたのですが、入力可能な文字が全く制限されません。  javascriptのステートメント(1)   → txt = String.fromCharCode(evt.which);  javascriptのステートメント(2)   → evt.cancelBubble = true;     evt.returnValue = false;     return false;  どのようにすれば、問題(1)、(2)を解決できるかどうか教えて下さい。  よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • auty
  • ベストアンサー率58% (284/486)
回答No.4

・ yambejp 様の方針で、 ・ Firefoxのほか、IEに対応しています。 ・ [Home]キー、[End]キー他も対処しました。 ------------------------------------------------------------ <html> <head> <script type="text/javascript"> <!-- function suujinomi(obj) { if (window.event) { var c = window.event.keyCode; if ( 48<=c&&c<=57 || 96<=c&&c<=105 || c==37 || c==39 || c==8 || c==45 || c==46 || c==36 || c==35 ) return; } var v=obj.value; v=v.replace(/[^0-9]/g,''); //v=v.replace(/[^0-9!"#$%&'\(\)]/g,''); obj.value=v; } //--> </script> </head> <body> <hr /> <input type=text value="" onkeyup="suujinomi(this)"> </body> </html> ------------------------------------------------------------

tfj3116
質問者

お礼

さらに具体的な処理を教えて頂きました。 おかげさまで、IE,Opera,firefox,safariの何れのブラウザでも 安定に作動するようになりました。 ありがとうございます。 今後とも、どうかよろしくお願い致します。

すると、全ての回答が全文表示されます。

その他の回答 (3)

noname#84373
noname#84373
回答No.3

<HTML> <script type="text/javascript"> function keychk(k){ if(47<k&&k<58 || 45==k || 46==k || 8==k || 95<k&&k<106 ||37==k ||39==k) return; return false; } </script> <input type="text" size="30" id="a" onKeydown="return keychk(event.keyCode)"> </HTML>

tfj3116
質問者

お礼

ありがとうございます。 考え方を再考する上で、大変参考となりました。

すると、全ての回答が全文表示されます。
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

単に入力されたデータをチェックするのではだめ? <script> function suujinomi(obj) { var v=obj.value; v=v.replace(/[^0-9a-zA-Z!\"#$%&\'\(\)]/,''); obj.value=v; } </script> <input type=text value="" onkeyup="suujinomi(this)">

tfj3116
質問者

お礼

ありがとうございます。 ブラウザの個性の違いに直接対処しようと 考えすぎていました。 今回は、教えて頂いた通り、入力されたデータをチェックする ことで対処するほうが適切でした。

すると、全ての回答が全文表示されます。
  • SAYKA
  • ベストアンサー率34% (944/2776)
回答No.1
tfj3116
質問者

お礼

ありがとうございます。 ご指摘の通りでした。 ご紹介頂いたサイトも大変参考となりました。

すると、全ての回答が全文表示されます。

関連するQ&A