событие onKeyPress не работает в Firefox
у меня есть следующий код JavaScript...Здесь я использую onKeyPress= " someFunction ()" в теге body, чтобы получить код ключа, который нажат.
код работает нормально в 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)">
<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>
4 ответов
когда появляются такие проблемы, я начинаю использовать любую структуру JavaScript. Эти рамки построены, чтобы избежать проблем с различными браузерами.
поймать все разные keypress()
API, как показывает ссылка из Emmett, может быть очень сложным.
пример:
в HTML head:
<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
}
передать объект события в качестве параметра, и ваш код будет работать в 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();
}
Я думаю, что Firefox не заботятся программисты... и вот почему это так., В навигаторе Firefox.appName возвращает "Netscape". таким образом, пользователь может редактировать свой код, как,
if(navigator.appName == "Netscape")
Key = event.charCode; //or e.which; (standard method)
else
Key = event.keyCode;