次の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()">
前もって感謝します.....
<!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)">
<b><u>P</u></b>rint
</button>
<button value="exit" accesskey="E" onclick="keypress(this.value)">
<b><u>E</u></b>xit
</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>
このような問題が発生すると、私はあらゆる種類の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();
});
ブラウザには、キーボードイベントを処理するさまざまな方法があります。詳細については、 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
}
イベントオブジェクトをパラメータとして渡すと、コードは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();
}
Firefoxはプログラマーを気にかけていないと思います...そしてこれがその理由です。Firefoxではnavigator.appNameは「Netscape」を返します。ユーザーは次のようにコードを編集できます。
if(navigator.appName == "Netscape")
Key = event.charCode; //or e.which; (standard method)
else
Key = event.keyCode;