一部のテキストだけのKEYCODEを有効にしたい

このQ&Aのポイント
  • 初心者が四苦八苦している状況で、バックスペースキーを無効にしているが、一部のテキストのKEYCODEを有効にする方法が知りたい。
  • フォームには有効にしたいテキストが存在し、全体的にバックスペースを無効にしているが、一部だけ解除したい。
  • 解決策を教えてください。
回答を見る
  • ベストアンサー

一部のテキストだけのKEYCODEを有効にしたい

四苦八苦している初心者です。よろしくお願いします。 バックスペースキーを以下のように無効にしています。 window.document.onkeydown = function () {if (event.keyCode == 8) {event.keyCode = null; return false;}} フォームに有効にしたいテキストが存在するのですが、どのようにしたら有効になりますでしょうか? <input type="text" name="set" size="60" value="ABC"> 全体にバックスペースを無効にし、一部だけ解除したいという内容です。よろしくお願いします。

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

  • ベストアンサー
  • susie-t
  • ベストアンサー率86% (37/43)
回答No.2

あ、テキストボックス全部で指定したければ以下のほうがいいということに気がつきました・・・。(ID指定不要です) --------------------------------------- <html> <head> <title></title> <script> <!-- window.document.onkeydown = function (event){ event = event || window.event; var elem = event.target || event.srcElement; if(elem.type == "text") return; if (event.keyCode == 8){ event.keyCode = null; return false; } } // --> </script> </head> <body> <input type="text"/> </body> </html> ---------------------------------------

その他の回答 (2)

  • susie-t
  • ベストアンサー率86% (37/43)
回答No.3

> ちなみに・・・現在、テキスト全部に対して指定していますが、 > その適すとの中で読み取り専用(readonly)かつOncopyでコピーができないようにしています。 > その場合は、idを指定した方法でOKでしょうか? すみません、ちょっとご希望の仕様がはっきりと分からないのですが、 テキストボックスがreadonlyの場合はバックスペースは無効にしたいということでしょうか? その場合はID指定でも可能ですが、以下でもできます。 ------------------------------------------- <html> <head> <title></title> <script> <!-- window.document.onkeydown = function (event){ event = event || window.event; var elem = event.target || event.srcElement; if(elem.type == "text" && elem.readOnly != true) return; if (event.keyCode == 8){ event.keyCode = null; return false; } } // --> </script> </head> <body> <input type="text"/> <input type="text" readonly/> </body> </html> ---------------------------------

rie-mama
質問者

補足

言葉が足りなかったようですみません。しかもテキストを適すとにしてしまって…。 そうです。読取専用のテキストの場合は、バックスペース無効です。

  • susie-t
  • ベストアンサー率86% (37/43)
回答No.1

テキストボックスにIDが指定できるなら以下で可能です。 ------------------------------------------------- <html> <head> <title></title> <script> <!-- window.document.onkeydown = function (event){ event = event || window.event; var elem = event.target || event.srcElement; if(elem.id == "ex") return; if (event.keyCode == 8){ event.keyCode = null; return false; } } // --> </script> </head> <body> <input type="text" id="ex"/> </body> </html> ------------------------------------------------- イベントオブジェクトのtargetプロパティ(Firefox等)、またはsrcElementプロパティ(IE)でイベント発生要素が取得できます。 イベントオブジェクト自体がIEとその他で取得方法が違います。IEはwindow.eventを使用しますが、Firefox等では引数に渡されます。 A = B || C; で、Bがnull OR undefined OR false OR 0 でなければ、AにBが入ります。逆ならCです。

rie-mama
質問者

お礼

完璧です!ありがとうございました。 ちなみに・・・現在、テキスト全部に対して指定していますが、その適すとの中で読み取り専用(readonly)かつOncopyでコピーができないようにしています。その場合は、idを指定した方法でOKでしょうか?

関連するQ&A

  • Altを使ったショートカットキー無効の方法

    いつもお世話になってます。 javascriptで、IEのショートカットキーのいくつかを無効にしているのですが、 Altと組み合わせて使うショートカットキーの無効化ができずに困ってます。 例えば、Ctrl+Iでお気に入りを開く処理の無効化はこう実現できました。 function keydown() { if(event.ctrlKey & event.keyCode == 73){ event.keyCode = 0; return false; } } document.onkeydown = keydown; ですが、Alt+Dでアドレスバー選択の無効化は以下では実現できませんでした。 function keydown() { if(event.altKey & event.keyCode == 68){ event.keyCode = 0; return false; } } document.onkeydown = keydown; どうすれば実現できるのか、教えてください。

  • IE8におけるショートカットキーの無効化方法

    タイトルの通り、現在IE8環境で、ショートカットキーを無効にする方法を模索しています。 ネットで調べた結果、イベントを受け取ることまでは成功するのですが、 それを無効化することができません(一部のショートカットキー)。 現在試しているのが Ctrl++→拡大 Ctrl+-→縮小 の二つです。 htmlのバージョンは4.01 Strictを使用しています。 以下ソース window.document.attachEvent('onkeydown', onKeyEvent); window.document.attachEvent('onkeyup', onKeyEvent); function onKeyEvent(e){ if(!e) e = window.event; //確認用 //console.log("Key Code : " + e.keyCode); //console.log("Event Type : " + e.type); //console.log("Ctrl Key : " + e.ctrlKey); if(e.keyCode != 17){ if(e.ctrlKey){ switch(e.keyCode){ case 187: case 189: //e.keyCode = 0; e.returnValue = false; e.cancelBubble = true; //window.event = e; return false; } } } return true; } alert()をいれると無効化できるといった記述も見たのですが、 今回はその方法は使わずに実装する予定です。 どなたか方法をご存知でしたら、ご教授ください。 (コメントアウトしているものも試しましたが、うまくいきませんでした)

  • 「Alt + ←」の機能(前のページに戻る)を抑止したい

    ◇環境 ブラウザ:Microsoft Internet Explorer 6.0 SP2 上記の環境で、「Alt + ←」の機能(前のページに戻る)をJavaScriptで抑止したいと考えています。サンプルとして、 window.document.onkeydown = altandArrowDisable(){  if(event.altKey && event.keyCode == 37) {   event.keyCode = 0;   return false;  }else{   return true;  } } と書いてみましたが機能(前のページに戻る)を抑止できません。 alert()を付加すると機能抑止できますが、それ以外で実現可能なのでしょうか? 宜しくお願い致します。

  • Enter キー 無効について

    こんにちは。 フォーム送信において、enter(return)キーを無効にするため、 下記のJavaScriptをネットで検索して利用しました。 function myEvent(aEvent){ var evt = aEvent ? aEvent : (event ? event : window.event); if(evt){ if(evt.keyCode == 13){ return false; } } } window.document.onkeydown = myEvent; しかし、これだとTEXTAREAの改行もできないので、 某サイトで見つけ、次のようにwindow.document....を書き換えました。 <form id='myForm' name='myForm'.....>.......</form> window.document.myForm.author.onkeydown = myEvent; window.document.myForm.kana.onkeydown = myEvent; window.document.myForm.sex.onkeydown = myEvent; window.document.myForm.age.onkeydown = myEvent; window.document.myForm.zip1.onkeydown = myEvent; window.document.myForm.zip2.onkeydown = myEvent; window.document.myForm.pref.onkeydown = myEvent; window.document.myForm.local1.onkeydown = myEvent; window.document.myForm.local2.onkeydown = myEvent; window.document.myForm.phone1.onkeydown = myEvent; window.document.myForm.phone2.onkeydown = myEvent; window.document.myForm.phone3.onkeydown = myEvent; window.document.myForm.fax1.onkeydown = myEvent; window.document.myForm.fax2.onkeydown = myEvent; window.document.myForm.fax3.onkeydown = myEvent; window.document.myForm.email.onkeydown = myEvent; window.document.myForm.subject.onkeydown = myEvent; window.document.myForm.captchaz.onkeydown = myEvent; //////////////// 結果的には、正常に動作します。 しかし、要素が2つ、3つなら気になりませんが、 ちょっとした「お問い合わせ]ページを作っても結構な数になります。 もっとシンプルなコードにならないでしょうか? どうか教えてください。お願いします。

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

    テキストフィールドに入力可能な文字を 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)を解決できるかどうか教えて下さい。  よろしくお願い致します。

  • 日本語入力の禁止

    お世話になります。 divにcontenteditable属性を付与して編集できるようにしました。 そのとき、日本語は入力禁止にしたいのですがime-modeはdivには使用できないみたいです。 日本語入力のときはkeycode229が返ってくるようなのでjavascriptでonkeydownのときに if (event.keyCode == 229) { return false; } というif文を入れてみました。alertとかで確認するとちゃんと日本語入力の時にはこのif文を通過しているみたいなのですが 日本語が入力されてしまいます。 div contenteditable=trueのときに日本語入力を禁止したい場合はどのようにすれば実現できるのでしょうか。 <div contenteditable=true onkeydown="return test();">編集テスト</div> function test() { if (event.keyCode == 229) { return false; } return true; } よろしくお願いします。

  • テキストフィールドに半角数値以外入力させない方法…。

    お世話になります! JavaScriptで、 function checkNum() {  c = String.fromCharCode(event.keyCode);  if ("0123456789".indexOf(c,0) < 0) alert("数値以外入力できません"); } と記述し、実行してみたのですが確かに数値以外は入力できないのですが BackSpaceやEnterキー、Tabキーを押した時にもアラートが発生します…。 本を見て、 function checkNum() {  c = String.fromCharCode(event.keyCode);  if ("0123456789".indexOf(c,0) < 0) return false; return true; } と記述すると、フォーム自体に半角数字しか入力できなくなると書いてあったのですが 実行しても普通に全角入力できました…。(泣) 何か方法ありますか?ご存知の方、宜しくご教授願います★ ちなみに、勿論<input>部分にonKeyDown="***()"の記述はしてますし JavaScriptが有効な状態での実行です。

  • ファンクションキー制御?

    こんにちわです。 タイトル通りなのですが、 JSでは、 function kdown(e) {var msg =""; var flg = 1; switch(window.event.srcElement.tagName){ case "INPUT" :if(event.srcElement.type != "text" && event.srcElement.type != "password" && event.keyCode!=9 && event.keyCode!=16 && event.keyCode!=32){return false;}else{flg=0;}break; case "TEXTAREA" :flg = 0;break; case "SELECT" :flg = 0;break; case "A" :flg = 2;break; } switch(event.keyCode){ case 8 :msg = "BS";break; case 78 :if(event.ctrlKey){msg = "Ctrl+N";}break; case 82 :if(event.ctrlKey){msg = "Ctrl+R";}break; case 116 :msg = "F5";break; case 122 :msg = "F11";break; } if(event.altKey){msg = "Alt";} if (flg == 0 ){switch(event.keyCode){case 8 :msg = "";break;case 13 :msg = "";break;}} else if (flg == 2 && event.keyCode==13)msg = ""; if(msg != ""){event.keyCode = 0;return false;}else{return true;} } document.onkeydown = kdown; こんな感じに制御するのを、 アクションスクリプトで制御出来ますか? HTMLにこのJS埋め込んでも、FLASHの所クリックして、 各キー押すと意味なくなってしまうので・・ F5やF11など使用されたくないのですが・・・ 入れ替えなどでも良いのですが。。。 宜しくお願いします。

  • テキストフィールドの入力規則(数値チェック)

    http://oshiete1.goo.ne.jp/kotaeru.php3?q=143226 を参考にさせていただいて、以下のコードで実行してみました。 =============================== <BODY> <FORM NAME="f" ACTION="UPDATE" METHOD="POST" TARGET="FRAME_D" onSubmit="return conf();"> <INPUT TYPE="TEXT" NAME="FM_KINGAKU" onKeyDown="return keyCheck(event.keyCode);" > <SCRIPT TYPE="text/javascript" SRC="./JS.SOURCE"></SCRIPT> <SCRIPT TYPE="text/javascript"> <!-- function keyCheck(keyCodes){ if((keyCodes >= 49 && keyCodes <= 57) || (keyCodes >= 96 && keyCodes <= 105) || keyCodes == 46 || keyCodes == 8) return true; else return false; } function conf(WK_LINEINDEX){ /* 省略 */ } // --> </SCRIPT> </FORM> </BODY> =============================== しかし、数値以外のキーを押しても何事もなかったかのように 入力できてしまうのです。 前の質問者のlovelypoohさんは解決されたみたいなんですが、 いったい何が違うのでしょう? onSubmit="return conf();" ってのと onKeyDown="return keyCheck(event.keyCode);" ってのが 同じFORMタグの中にある、とか関係あるのでしょうか?

  • return falseが効かない(F5キーの無効化)

    JavaScriptでF5キーの無効化をしています。 以下のソースで一応は実現できていますが、1台のマシンだけ 無効化されないものがあります。 =================== <html> <head> <title>F5キーを無効にする</title> <script language="JavaScript"> <!-- window.document.onkeydown = function () { if (event.keyCode == 116) { alert("来た"); event.keyCode = null; return false; alert("来てない"); } } //--> </script> </head> <body> </body> </html> =============== 該当のマシンでF5キーを押すと「来てない」のアラートは出ない のですが、再読み込みがされてしまいます。他の端末では 再読み込みはされません。 以下のようなサイトでJavaScriptのバージョン差異を確認しましたが 再読み込みがされる/されない端末では全て一致しました。 http://diaspar.jp/node/49 「インターネットオプション」-「セキュリティの設定」に ついても差異が見られませんでした。 OSはWindowsXpSP2 ブラウザはIE6.0SP2です。 何故このような動作の違いが発生するのか、御分かりになられる方 どなたか教えて下さい。宜しくお願いします。

専門家に質問してみよう