JavaScriptでハイフンの入力を表示しない方法

このQ&Aのポイント
  • JavaScriptを使用してハイフンの入力を表示しない方法について説明します。
  • 特定のキー入力に対して文字の表示を制御するJavaScriptプログラムを作成しました。
  • ハイフンの入力に関してはキーコードの変換を行うことで対応しましたが、特定の環境ではハイフンキーのコードが正しく発生しない場合があります。
回答を見る
  • ベストアンサー

JavaSc「-」を入力して「-」を表示しないとは

document.body.onkeydown=pressKey; function pressKey(e) { keyNum=e.keyCode; if(keyNum>=65 && keyNum<=90){ keyNum=keyNum+32;} keyChar=String.fromCharCode(keyNum); document.getElementById("area").innerHTML=keyChar; } <div id="area"></div> HTML、JavaScriptのこんな感じのプログラムで 「a」を入力するとキーコードが発生するので (ただし、ローマ字は大文字の「A」がヒットするので) 拾って(大文字なら小文字に変換する) 文字に変換して <div id="area"></div> の内容として タイプするとリアクションでその場で表示できます。 「a」と打つなら「a」が現れる仕掛けです。 同じことがハイフン入力でできません。 (ノートPC使用、「0」の隣。) キーコードをアラート表示すると189でした。 これはアスキー文字コード128以上の一覧にあって 文字としては1文字で1/2を表示するというものでした。 タイピングソフトを自作してこれに気付きました。 ハイフン入力にその表示が正常にできないということは このままではお題に伸ばし棒入りの文章が使えません。 英文例題に伸ばし棒(半角ハイフン、コードは45)があっても 入力はコード189を発生するので一致判定ができません。 というか、入力動作で if(keyNum==189){ keyNum=45;} ハイフンのコード45に修正する作業をわざわざ差し込みました。 動作的にはこの対応で完成させたのですが、 ハイフンを入力したらハイフンキーのコード45を発生せずに 他のコードの発生させる機種は、 この仕掛けに何の意味やメリットがあるのか思い当たりません。 設定異常の症状でしょうか?

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

  • ベストアンサー
  • chie65535
  • ベストアンサー率43% (8514/19356)
回答No.1

>設定異常の症状でしょうか? javascriptのonkeydownは押されたキーの「キー番号(アスキーコードとは異なるコード)」をkeyCodeに返す仕様になっています。 この「キー番号」は、フルキーボード側の0~9、A~Zのキーについて、0~9、A~Zのアスキーコードと同じ数値になるようにキー番号を合わせてあります(番号をアスキーコードに似せてあるだけで、アスキーコードが返されている訳ではない事に注意すること) それ以外のキーは「アスキーコードと異なるコード」が返って来ます。 例えば、テンキーの「0」(ゼロ)は96、フルキーの「0」(ゼロ)は64を返すようになっています。 例えば、テンキーの「-」(マイナス)は109、フルキーの「-」(マイナス)は189を返すようになっています。 この時「=」(SHIFT押しながら「ー」キー)は「-」キーと同じ番号の189になります。 ですので、onkeydownは「-」と「=」を区別出来ません。どちらも「189」が返されます。 「押したキー入力を、アスキーコードで知りたい」と言う場合は「onkeypress」を使います。 onkeypressであれば「ー」キーは45(アスキーコードの「-」)を返し、「=」キーは65(アスキーコードの「=」)を返し、「a」は97、「A」は65のように、大文字も小文字も区別して返されます。 以下のサイトで「onkeydownとonkeypressの違い」を比較できます。 https://web-designer.cman.jp/javascript_ref/keyboard/keycode/ >この仕掛けに何の意味やメリットがあるのか思い当たりません。 onkeydownは、実は「javascript仕様での、キーの物理番号」を返しています。 「キーの物理番号」を返すので「テンキーの数字キーと、フルキーの数字キー」を区別できます。同様に「テンキーの*と、フルキーの*(:)」も区別できます。 また「SHIFTキーを押しただけ」とか「CTRLキーを押しただけ」も判ります。 これが出来るのは「アスキーコードとは異なる、キーの物理番号」を返すようになっているからです。

zchess
質問者

お礼

私が参照した教本では、機能が「どんなコード規格でやるものなのか」 説明はありませんでした。 キーコードがアスキーコードとどう違うものなのか わかっていないと手ごわかったです。 なかなかたどり着けなかった情報でした。 非常に助かります。すっきりしました。 ありがとうございました。

関連するQ&A

  • キーコードを表示するJavaScriptで不明な点があります。

    http://game.gr.jp/about/test/keyWithoutEnter.htm に、なにかキーを押すと、キーコードを表示するJavaScriptがあるのですが、 ソースの中の、 //----------------------------------------------------------- if(document.layers)document.captureEvents(Event.KEYPRESS) self.focus() //----------------------------------------------------------- の部分がわかりません。 ここでは何をやっているのでしょうか? また、「if(document.layers)」はNN4か否かを判別しているということは分かるのですが、 これは、 //----------------------------------------------------------- if(document.layers) {document.captureEvents(Event.KEYPRESS)} self.focus() //----------------------------------------------------------- なのでしょうか? それとも if(document.layers) { document.captureEvents(Event.KEYPRESS) self.focus() } なのでしょうか? //----------------------------------------------------------- あと、それと関連してなのですが、Gmailでは、 cを押すと新規メール作成、「?」を押すと、ショートカットキー一覧が出ますが、 テキストボックスやテキストエリアなど、 formのパーツ内にカーソルがあり、文字入力可能状態となっているとき、 gmailでは、このショートカットは無効となるようです。 これはどうやって実現できるのでしょうか? 以上、よろしくお願いいたします。

  • 数字のみの入力制限をかけたTextBoxで、"."の入力も許可したい

    環境はVB.NETです。 以下のコードで、TextBoxへの入力を、0~9の数字のみ(BackSpaceも許可)に制限していますが、"."(少数点)の入力も許可したいです。 e.KeyChar = "."c の判定をIf文に追加してみましたが、実現できませんでした。 ご教授いただけると幸いです。 よろしくお願いします。 Private Sub TextBox1_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress  If (e.KeyChar < "0"c Or e.KeyChar > "9"c) And e.KeyChar <> vbBack Then   e.Handled = True  End If End Sub

  • 選んだ文字列を表示させる方法について

    JavaScriptを使って,ドラッグで選んだ文字列を,同じページ内に,抜き出して表示させることを考えています。 いろいろなページを参考にして,以下のように作ってみましたが,どうもうまく動きません。 具体的には,文字を選ぶと[object]と表示されてしまいます。 アドバイスをお願いします。 <html lang="ja"> <head> <script type="text/javascript"> function doAlert(){ if(document.all){ var s = new String; s=document.selection.createRange(); if (document.all) { his.innerHTML = s; } else if ( document.layers ) { document.his.document.open(); document.his.document.write(s); document.his.document.close(); } }else if(document.getElementById){ s=window.getSelection(); document.write(s); } } document.onmouseup=doAlert; </script> </head> <body> <div id="div1" style="font-size:24pt"> 選択してください。 </div> <hr> <DIV id="his" style="position: absolute;"> <P>上の文をドラッグすると,ここに選んだ文字列が表示されます</P> <hr> </DIV> </body> </html>

  • 合計値の表示

    コード/品名/単価 01/鰯/10円 02/鮭/20円 というデータがあって --ソースstart-- function codeChange(c, n){ if(document.getElementById){ if(c==01){ document.getElementById("sina"+[n]).innerHTML=("鰯"); }else if(c==02){ document.getElementById("sina"+[n]).innerHTML=("鮭"); } } function suryoChange(s, n){ if(document.getElementById){ if(c==01){ document.getElementById("sum"+[n]).innerHTML=(10*s); }else if(c==02){ document.getElementById("sum"+[n]).innerHTML=(20*s); } }… <table> <tr> <td><input type="text" name="code1" onChange="javascript:codeChange(document.forms(0).code1.value, 1)"></td> <td><div id="sina1"></td> <td><input type="text" name="suryo1" onChange="javascript:suryoChange(document.forms(0).code1.value, 1)"></td> <td><div id="sum1"></td> </tr> <tr> <td><input type="text" name="code2" onChange="javascript:codeChange(document.forms(0).code2.value,2)"></td> <td><div id="sina2"></td> <td><input type="text" name="suryo2" onChange="javascript:suryoChange(document.forms(0).code2.value,2)"></td> <td><div id="sum2"></td> </tr> </table> --ソースend-- <div id="total"></div> で数量の入力値が変わるごとに 各合計のトータルの合計を表示したいのですが やり方がわかりません。 よろしくお願いします。

  • 文字入力の初歩的な疑問にお答えください

    以下のコードで、文字入力変数(tx3) を他のページでも共用するために 文字入力目的の function textout() を 外部ファイル化したいのですが 方法が分かりません。 入力欄と同じページに、入力された文字列を確認のために、 入力窓を消さずに表示するために、なるべく変数を使用する形で エレメントにあまり依存せずにこの目的を達成する方法を教えて下さい。 できれば、一つのページに4つくらいの入力欄を設けたいため、 具体的なスクリプトを例示していただければ助かります。 <html> <head> <script type="text/javascript"> function textout(){ if (document.getElementById){ var tx3 = document.form1.text1.value; document.getElementById("output").innerHTML=tx3; }} </script> </head><body> <form name="form1"> <textarea name="text1" cols="50" rows="4"></textarea> <br> <input type="button" onClick="textout()" value="verify"> </form> <div id="output"></div> </body> </html>

    • ベストアンサー
    • HTML
  • Excelで都道府県を入力するとそのコードを表示させるようにするには?

    Excelについて質問です。 例えばセルB1に都道府県を入力すると、A1に都道府県コード(1~47までの数字)を表示させたいと思っています。 別シートのA列に都道府県コード、B列に都道府県を作って47都道府県コードとその都道府県を作ってVLOOKUPで表示させようとしましたがうまくできませんでした。 次にif関数を使って「B1が北海道ならA1に1を表示」というように47都道府県をif関数を重複させて作っていきましたがif関数を8つぐらいまでしか重複させることができず失敗に終わりました。 何か良い方法はありますでしょうか?

  • Firefoxで表示できないのは何故でしょう?

    お世話になります IE6、Operaでは表示できたのですがFirefoxでは表示できませんでした(><) 何か見落としがあるのでしょうか? <script language="javascript"> <!-- window.onload = function() { n=document.getElementById("div1").innerText; if(n == "a0"){ document.getElementById("img1").style.display = "block"; document.getElementById("img1").style.top = "100px"; document.getElementById("img1").style.left = "100px"; } if(n == "a"){ document.getElementById("img2").style.display = "block"; document.getElementById("img2").style.top = "100px"; document.getElementById("img2").style.left = "200px"; } } //--> </script> <div id="div1">a</div> <form action="test.cgi" method="post"> <input type="hidden"name="a" value="leap_day"> <input type="image" src="sample0.gif" id="img1" style="position:absolute;display:none;"> </form> <form action="test.cgi" method="post"> <input type="hidden"name="b" value="leap_day"> <input type="image" src="sample1.gif" id="img2" style="position:absolute;display:none;"> </form> n=document.getElementById("div1").innerText; if(n == "a0"){ } if(n == "a") { } を消すと表示はできるのですが・・・

  • クリックで特定のdiv要素が表示されるJavascriptに追加機能を

    クリックで特定のdiv要素が表示されるJavascriptに追加機能を持たせたい よろしくお願い致します。 下記のようなコードで、HTML部分の「リンクテキスト」をクリックすると「クリックで開く内容」が表示され、かつ、リンクテキスト(id="link-1")の文字色が変わるJavascriptを使用しています。 ■Javascript部分 function showHide(targetID) { if( document.getElementById(targetID)) { if( document.getElementById(targetID).style.display == "none") { document.getElementById(targetID).style.display = "block"; document.getElementById('link-1').style.color = "#cc0000"; } else { document.getElementById(targetID).style.display = "none"; document.getElementById('link-1').style.color = "#000000"; } } } ■HTML部分 <a href="#" id="link-1" onClick="showHide('hoge1');return false;">リンクテキスト</a> <div id="hoge1" style="display:none;">クリックで開く内容</div> リンクテキストの文字色が変わる部分は見よう見まねで追加したのですが、文字色が変わる部分を、link-2、link-3・・というように同ページに複数配置したい場合、どのようなコードに変更すればよいのでしょうか。 できればid="link-1"などという記述はせずに、showHide('hoge1');をshowHide('hoge2');に変えて、<div id="hoge1" style="display:none;">を<div id="hogge2" style="display:none;">に変えるだけで、文字色も変わるようにできれば一番良いのですが、そのような方法はあるのでしょうか? 分かりにくい箇所は補足説明致しますので、どうぞご教授下さいますようお願い致します。

  • フォームのリアルタイム入力チェック

    現在、下記ソース(他のサイト様を参考)に送信時に入力チェックを行い、 エラーがあれば、送信されないようものを使っております。 送信時に加え、入力時に入力項目のみをリアルタイムに入力判定を行いたいです、 入力時にリアルタイムに行うためには、どのようにすればいいのでしょうか。 エラーがあれば、下記のように隠しているメッセージなどが表示され、 問題がなければ、表示させないまたは、表示されているエラーメッセージを隠す。 で構いません。 よろしくお願い致します。 ・htmlファイル <div id="notice-form" style="display: none; color: red;"> 【必須項目に未入力があります】</div> <form name="mailform" method="post" action="index.php" onsubmit="return formCheck()"> <!--テキスト--> <div id="text1" style="display: none; color: red;"> 【text1入力して下さい】</div> <input type="text" name="text1" /><br /> <div id="text2" style="display: none; color: red;"> 【text2入力して下さい】</div> <input type="text" name="text2" /><br /> <div id="text3" style="display: none; color: red;"> 【text3入力して下さい】</div> <input type="text" name="text3" /><br /> ・JSファイル function formCheck(){ var flag = 0; if(document.mailform.text1.value==""){ flag = 1; document.getElementById('text1').style.display="block"; }else{ document.getElementById('text1').style.display="none"; } if(document.mailform.text2.value==""){ flag = 1; document.getElementById('text2').style.display="block"; }else{ document.getElementById('text2').style.display="none"; } if(document.mailform.text3.value==""){ flag = 1; document.getElementById('text3').style.display="block"; }else{ document.getElementById('text3').style.display="none"; } if(flag){ document.getElementById('notice-form').style.display="block"; return false; }else{ document.getElementById('notice-form').style.display="none"; return true; } }

  • ボタンクリックで別フレームに文字表示する方法

    Javascriptでチェックボックスにチェックを入れた時、 別フレームのテキストエリアに文字を記入するよう以下のif分を使っています。 if(document.○○.○○.checked == true) { objTextarea.value += ○○ } これをチェックボックスではなくてbuttonをクリックする事で、 テキストエリアに文字を記入するように変更したいのですが、 checked == trueの部分を書き換えれば出来るのかと思い、 いろいろ試してみましたが上手く出来ません。 また、「A」と「B」のボタンがあるとすると、 「A」を押して文字を表示した後、「B」を押すと 「A」の文字がテキストエリアから消えるようにしたいのですが、 どのように記載すればいいか教えていただけませんでしょうか?

専門家に質問してみよう