• 締切済み

document.onkeydownについて

HTML5で、javascriptの中に、 ============ソース一部=========== //関数 function a(evt) { if (evt.keyCode == 39) rD = true; } document.onkeydown = a; ============ソース一部 ここまで=========== と記述されている文がありました。  document.onkeydown = a; で、onkeydownに、a関数を登録したのだろうということまでは 予想がつくのですが、aの後ろに()は不要なのでしょうか? キーが押されたイベントが、evtには自動で入ってると思うのですが、 関数登録?呼び出し宣言をするときに、  document.onkeydown = a(); ではなく  document.onkeydown = a; の理由がわかりません。 どこを見ると、()なしでいいという情報を得ることができるでしょうか ご教授よろしくお願いします。

みんなの回答

  • gorusura
  • ベストアンサー率59% (25/42)
回答No.2

先に回答されている方の通りです。 a() は、 a関数を実行するということですので、 document.onkeydown = a(); だと、a関数を実行した戻り値を代入することになり、結果戻り値なしなので、undefined を代入することになります。 document.onkeydown = a; なら、a関数自体を代入していますので、documentオブジェクトでkeydownイベントが発生したときに、実行してくれます。

ShiftTail
質問者

お礼

少し今一つ整理できないので別質問として上げさせていただきます。 情報ありがとうございました。

ShiftTail
質問者

補足

情報ありがとうございます。 関数で引数を使用するものがあると思うのですが、 keisan(1,2); 等で function keisan(x,y){ a=x+y; documnet.write(a); } の場合、 document.onkeydown = keisan(); の使い方は間違っているということになるのでしょうか? キーが押されたとき、足し算させて処理をさせ、結果を表示させる。 という内容にしたいのですが。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

>document.onkeydown = a(); は、a()の戻り値を代入するという意味です

ShiftTail
質問者

お礼

少し今一つ整理できないので別質問として上げさせていただきます。 情報ありがとうございました。

ShiftTail
質問者

補足

情報ありがとうございます。 関数で引数を使用するものがあると思うのですが、 keisan(1,2); 等で function keisan(x,y){ a=x+y; documnet.write(a); } の場合、 document.onkeydown = keisan(); の使い方は間違っているということになるのでしょうか? キーが押されたとき、足し算させて処理をさせ、結果を表示させる。 という内容にしたいのですが。

関連するQ&A

  • Tabキーのキャンセル

    かなり短期間にこちらでいくつも質問して しまっていて申し訳ないのですが、 どうにも他で回答を調べられず…(<力不足) と言う訳で、しつこく 「IEだけでなくNetscape6以降でも動かしたい」 処理についてお聞きいたします。 IEでは上手く動いてますが、Netscape6以降でTabのキャンセルは指定できるのでしょうか? ちなみに↓のNetscape用関数は動きません(……。) 必要そうな所だけ書き出します↓ function document_onLoad() {  // IE 4以降の場合  if (isIE)  {   // 各種イベントハンドラーの初期化   document.onkeydown = document_onKeyDownIE;  }  // N6,7の場合  if (isN6)  {   window.onkeydown = document_onKeyDownN6;  } } /// tabキーが入力されたときのイベント処理(IE用) function document_onKeyDownIE() {  // TABキー  if (event.keyCode == 9)  {   // 本来のtabの処理をキャンセルする。   event.returnValue = false;  }  return; } /// tabキーが入力されたときのイベント処理(NN用) function document_onKeyDownN6(evt) {  var keyCode = evt.which;  if (keyCode == 9)  {   // 本来のtabの処理をキャンセルする。   evt.returnValue = false;   evt.cancelBubble = true;  }  return; }

  • 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; どうすれば実現できるのか、教えてください。

  • 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つなら気になりませんが、 ちょっとした「お問い合わせ]ページを作っても結構な数になります。 もっとシンプルなコードにならないでしょうか? どうか教えてください。お願いします。

  • キーコードなどでAlt+○を認識してイベントを発生させるには?

    キーコードなどでAlt+○を認識してイベントを発生させるにはどうしたらよいのでしょうか?ひとつのキーでならできたのですが複数のキーを組み合わせることができませんでした。参考までにうまくいかなかったプログラムの関数部分を記述しておきます。このプログラムだと一回目はうまくいくのですが二回目になるとsキーを押すだけで実行されてしまいます。 document.onkeydown=keyDown; function keyDown() { keynum1=event.keyCode; if(keynum1==18)//この番号がキーに対応してる(Altキー) { document.onkeydown=pressEnter; } } function pressEnter() { keynum2=event.keyCode; if(keynum2==83)//この番号がキーに対応してる(sキー) { document.write("キーコード"); } }

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

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

  • HTMLのプルダウンメニューと文字制御

    HTML/javascriptと文字コードについて三点ほど質問させてください。 1. HTMLフォーム上のプルダウンメニュー(<select name="test"><option>…</option></select>)についてですが、プルダウンメニューに文字入力は可能でしょうか? 2. HTMLのテキスト(<input type="text">)などで数字のみ入力可能になるような制御をしてみたいです。 javascriptのonkeydownイベントを用いて function keyControl(){ //16進数文字コードを用いて0~9の数字以外の場合 if( (event.keyCode < 0x30) || (event.keyCode > 0x40) ){  ?文字入力を反映させない? } } 上記の関数を呼び出す事で制御したいのですが「?文字入力を反映させない?」の部分にはどういうコーディングをすればいいでしょうか? 3. DELETEキーを押したときにあるイベントを起こしたいと考えてます。 javascriptのonkeydownイベントを用いて function testDELETE_Enter(){ if( event.keyCode==0x7f ){ alert('DELETEキーを押下しました!'); } } 上記の関数を呼び出すことで制御したいのですが、if文の条件判断がうまくいかなくて、Deleteキーを押した時alert()を実行する事が出来ません。 下記のサイトでDELキーの文字コードは0x7fだと思うのですが、これは私の勘違いでしょうか? http://e-words.jp/p/r-ascii.html 以上三点、解る方いましたらご教授お願いします

  • evtとは

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <meta http-equiv="Content-Script-Type" content="text/javascript"> <title>イベント情報の取得</title> </head> <body> <script type="text/javascript"> <!-- // ページのロード時に呼び出される関数initをセット window.onload=init; // ページのロード時に呼び出される関数 function init(){ // onclickイベントハンドラを定義 document.getElementById("txt").onclick=msg; } // onclickイベントハンドラ関数 function msg(evt){ // W3C DOMとIEの両方のイベントオブジェクトに対応 evt = (evt) ? evt : ((event) ? event : null); alert(evt.type+"されました"); } //--> </script> <div id="txt">クリックしてください</div> </body> </html> 上記のコードで【MozillaやOperaなどのブラウザでは、イベントハンドラ関数を設定した場合にも、関数の引数としてイベントオブジェクトが渡される】とのことですが、イベントハンドラ関数msgに渡されているevt【function msg(evt){】はいきなり出て、何を意味しているのかよくわかりません。 このコードを見て推測できる方、アドバイスをお願い致します。

  • 日本語入力の禁止

    お世話になります。 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; } よろしくお願いします。

  • 「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()を付加すると機能抑止できますが、それ以外で実現可能なのでしょうか? 宜しくお願い致します。

  • イベントの関数について、よくわからないことがあります。

    イベントの関数について、よくわからないことがあります。 (1)引数をセットしない関数と window.document.onmousemove = f; function f(evt) { alert(evt); } (2)無名関数?に引数 window.document.onmousemove = function(e) { alert(e); } (1)(2)は同じ動作なのですが、window.document.onmousemoveにセットする関数の引数は 特殊なのでしょうか?

専門家に質問してみよう