9

次のJavascriptコードがあります。ここでonKeyPress="someFunction( )"は、body タグを使用して、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>
4

4 に答える 4

12

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

keypress()Emmett ショーからのリンクのように、すべての異なる 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();
});
于 2010-12-21T10:21:46.343 に答える
9

ブラウザーには、キーボード イベントを処理するさまざまな方法があります。詳細については、 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
}
于 2010-12-21T07:12:03.463 に答える
7

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

<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();  
}
于 2012-10-17T06:46:17.367 に答える
-1

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

if(navigator.appName == "Netscape") 
    Key = event.charCode; //or e.which; (standard method)
else 
    Key = event.keyCode;
于 2011-08-23T18:18:58.863 に答える