web-dev-qa-db-ja.com

onKeyPressイベントがFirefoxで機能しない

次のJavaScriptコードがあります...ここでは、bodyタグでonKeyPress = "someFunction()"を使用して、押されたキーのkeyCodeを取得しています。

コードはIE8で正常に機能していますが、これはFirefoxでは機能しません。

これに対する解決策を教えてください。

<html>
<head>
<title>onKeyPress( ) event not working in firefox..</title>
<script>
function printDiv()
{
  var divToPrint=document.getElementById('prnt');
  newWin=window.open(''+self.location,'PrintWin','left=50,top=20,width=590,height=840,toolbar=1,resizable=1,scrollbars=yes');
  newWin.document.write(divToPrint.outerHTML);
  newWin.print();
  //newWin.close();
}
</script>

<script>
function keypress()
{
  alert(event.keyCode);
  var key=event.keyCode;
  if(key==112 || key==80)
 printDiv();
  else if(key==101 || key==69)
    window.location="http://google.com";
  else if(key==114 || key==82)
    window.reset();  
}
</script>
</head>
<body bgcolor="lightblue" onkeypress="keypress()">

前もって感謝します.....


これは、IE8で正常に機能し、Firefoxでは機能しないコード全体です。

<!DOCTYPE html>
<html>
    <head>
    <title>Please help me out</title>
    <script type="text/javascript">
    function printDiv()
    {
      var divToPrint=document.getElementById('prnt');
      newWin=window.open(''+self.location,'PrintWin','left=50,top=20,width=590,height=840,toolbar=1,resizable=1,scrollbars=yes');
      newWin.document.write(divToPrint.outerHTML);
      newWin.print();
    }
    </script>

    <script type="text/javascript">
    function keypress(val)
    {
      //-----------------------------------------------------   
      //alert('nnnn');
      //alert(window.event ? event.keyCode : val.which);  
      //if(val.which != 0 && val.charCode != 0)
      // alert('Firefox'+String.fromCharCode(val.which));
      //else
      // alert('IE'); 
      //------------------------------------------------------- 
      var key=event.keyCode;
      if(key==112 || key==80 || val=="print")
        printDiv();
      else if(key==101 || key==69 || val=="exit")
        window.location="http://google.co.in";
      else if(key==114 || key==82 || val=="refresh")
        document.forms[0].reset();  
      else
        event.returnValue=true;
    }
    </script>
</head>
<body bgcolor="lightblue" topmargin="0" leftmargin="0"marginwidth="0px" marginheight="0px" onkeypress="keypress(null)">
<table align="left" border="1" cellpadding="5" cellspacing="0" style="width: 100%;height:100%">
<tbody>
<tr><td width="20%" valign="top">ccccccccccc</td>
    <td width="80%" align="center">
        <table style="width: 100%" border="0" valign="top">
        <tr align="right">
        <td valign="top">
        <button value="refresh" accesskey="R" onclick="keypress(this.value)">
            <b><u>R</u></b>efresh
        </button>
        <button value="print" accesskey="P" onclick="keypress(this.value)">
            &nbsp;&nbsp;<b><u>P</u></b>rint&nbsp;&nbsp;
        </button>
        <button value="exit" accesskey="E" onclick="keypress(this.value)">
            &nbsp;&nbsp;&nbsp;<b><u>E</u></b>xit&nbsp;&nbsp;&nbsp;
        </button>
        </td></tr>
        </table> 
        <h3>Press the letters P->Print , E->Exit etc....</h3>   
        <h1>Just a test for keypress event</h1>
        <form action="http://google.co.in" method="Post">
            <div id="prnt">
                zzzzzzzzzzzzzzz
            </div>
        </form>
    </td>
</tr>
</tbody>
</table></body></html>
9
Nirmal

このような問題が発生すると、私はあらゆる種類のJavaScriptフレームワークを使い始めます。これらのフレームワークは、さまざまなブラウザでの問題を回避するために構築されています。

エメットのショーからのリンクのように、すべての異なるkeypress()apiをキャッチすることは非常に難しい場合があります。

例:

HTMLヘッドの場合:

<script src="http://code.jquery.com/jquery-1.4.4.js"></script>

JSタグの場合:

$(document).keydown(function(event) {
 alert('You pressed '+event.keyCode);
 event.preventDefault();
});
12
powtac

ブラウザには、キーボードイベントを処理するさまざまな方法があります。詳細については、 http://unixpapa.com/js/key.html をご覧ください。

たとえば、コードに次の変更を加えると、Firefoxで機能するようになります。

<body bgcolor="lightblue" onkeypress="keypress(e)">

そして

function keypress(e) {
    alert(window.event ? event.keyCode : e.which);
    // other stuff
}
9
Emmett

イベントオブジェクトをパラメータとして渡すと、コードはFirefoxと同様にIEで機能します。コード例は次のとおりです。

<body bgcolor="lightblue" onkeypress="keypress(event)">
function keypress(event) {
  alert(event.keyCode);
  var key=event.keyCode;
  if(key==112 || key==80)
      printDiv();
  else if(key==101 || key==69)
      window.location="http://google.com";
  else if(key==114 || key==82)
      window.reset();  
}
7
Kumar

Firefoxはプログラマーを気にかけていないと思います...そしてこれがその理由です。Firefoxではnavigator.appNameは「Netscape」を返します。ユーザーは次のようにコードを編集できます。

if(navigator.appName == "Netscape") 
    Key = event.charCode; //or e.which; (standard method)
else 
    Key = event.keyCode;
0
Vinay