Javascript 如何限制web应用程序中的键盘键事件?
我正在做安全的web应用程序。我的客户端要求是不允许应用程序使用F5刷新 也可以使用退格键限制Esc的事件 我使用的是jQuery 1.9.1 我的代码如下 我可以得到警报,但如果我按下F5按钮,我的页面就会刷新。我不知道为什么 退格也返回到上一页Javascript 如何限制web应用程序中的键盘键事件?,javascript,jquery,jquery-events,preventdefault,Javascript,Jquery,Jquery Events,Preventdefault,我正在做安全的web应用程序。我的客户端要求是不允许应用程序使用F5刷新 也可以使用退格键限制Esc的事件 我使用的是jQuery 1.9.1 我的代码如下 我可以得到警报,但如果我按下F5按钮,我的页面就会刷新。我不知道为什么 退格也返回到上一页 $(document).on('keydown' , function(event) { switch (event.keyCode) { case 116 : // 'F5' alert("116 :"
$(document).on('keydown' , function(event) {
switch (event.keyCode) {
case 116 : // 'F5'
alert("116 :"+event.keyCode);
event.preventDefault();
event.returnValue = false;
event.keyCode = 0;;
break;
case 27: // 'Esc'
alert("27 :"+event.keyCode);
event.preventDefault();
event.returnValue = false;
break;
case 08: // 'BackSpace'
if (event.srcElement.tagName == "INPUT"
|| event.srcElement.tagName == "TEXTAREA") {
} else {
event.preventDefault();
event.returnValue = false;
event.keyCode = 0;
}
break;
}
});
谁能指出我哪里出错了吗?看。尝试在输入框中输入一些内容,然后在框架上尝试“f5”、“esc”和“backspace”键。它可以在Mac Chrome浏览器下的JSFIDLE中工作,也可以在您的浏览器上工作。当您阻止事件发生时,应调用StopRogation函数。此外,在调用srcement时,应该通过event.originalEvent.srcement
调用原始事件,因为规范化的jqueryevent
不包含srcement属性。在控制台中,它给出未定义的属性错误。还有如下错误event.keyCode=0;**代码>
$(document).on('keydown' , function(event) {
switch (event.keyCode) {
case 116 : // 'F5'
alert("116 :"+event.keyCode);
event.preventDefault();
event.stopPropagation();
console.log('hello');
break;
case 27: // 'Esc'
alert("27 :"+event.keyCode);
event.preventDefault();
event.stopPropagation();
break;
case 08: // 'BackSpace'
if (event.originalEvent.srcElement.tagName == "INPUT"
|| event.originalEvent.srcElement.tagName == "TEXTAREA") {
alert("27 :"+event.keyCode);
event.preventDefault();
event.stopPropagation();
} else {
alert("27 :"+event.keyCode);
event.preventDefault();
event.stopPropagation();
}
break;
}
});
这是我的解决方案
var x;
var isIE;
var e;
var code;
var ElementType;
document.onkeydown = whichkey;
function whichkey(e) {
isIE = (document.all ? true : false);
if (navigator.appName == "Microsoft Internet Explorer") {
switch (event.keyCode) {
case 112: //f1 button
if (isIE) {
document.onhelp = function() {
return (false);
};
window.onhelp = function() {
return (false);
};
}
event.returnValue = false;
event.keyCode = 0;
return false;
case 82: //R button
if (event.ctrlKey) {
event.returnValue = false;
event.keyCode = 0;
return false;
}
else {
return true;
}
case 113: //f2 button
event.returnValue = false;
event.keyCode = 0;
return false;
case 114: //f3 button
event.returnValue = false;
event.keyCode = 0;
return false;
case 115: //f4 button
event.returnValue = false;
event.keyCode = 0;
return false;
case 116: //f5 button
event.returnValue = false;
event.keyCode = 0;
return false;
case 117: //f6 button
event.returnValue = false;
event.keyCode = 0;
return false;
case 118: //f7 button
event.returnValue = false;
event.keyCode = 0;
return false;
case 119: //f8 button
event.returnValue = false;
event.keyCode = 0;
return false;
case 120: //f9 button
event.returnValue = false;
event.keyCode = 0;
return false;
case 121: //f10 button
event.returnValue = false;
event.keyCode = 0;
return false;
case 123: //f12 button
event.returnValue = false;
event.keyCode = 0;
return false;
case 8: //Backspace button
if (event.srcElement.tagName == "INPUT" || event.srcElement.tagName == "TEXTAREA") {
return true;
}
else {
return false;
}
}
}
else {
if (!e)
e = window.event;
if (e.keyCode)
code = e.keyCode;
else if (e.which)
code = e.which;
if (code == 112) {
//f1 button
return false;
}
if (code == 8) { // 'BS'
ElementType = e.srcElement || e.target;
if (ElementType.tagName == "INPUT" || ElementType.tagName == "TEXTAREA") {
return true;
}
else {
return false;
}
}
if (code == 113) {
//f2 button
return false;
}
if (code == 114) {
//f3 button
return false;
}
if (code == 115) {
//f4 button
if (event.altKey) {
return false;
}
else {
return false;
}
}
if (code == 116) {
//f5 button
return false;
}
if (code == 117) {
//f6 button
return false;
}
if (code == 118) {
//f7 button
return false;
}
if (code == 119) {
//f8 button
return false;
}
if (code == 120) {
//f9 button
return false;
}
if (code == 121) {
//f10 button
return false;
}
if (code == 123) {
//f12 button
return false;
}
if (code == 18) {
//altf4 button
return false;
}
if (code == 82) {
//R button
if (event.ctrlKey) {
return false;
}
else {
return true;
}
}
if (event.altKey && event.keyCode == 115) // disable alt+f4
{
event.keyCode = 0;
event.cancelBubble = true;
return false;
}
}
}
switch(event.keyCode){
使用event.which
取而代之的是jQuery规范化关键事件的方法。“但它似乎不起作用。”-它似乎在做什么?警报显示了吗?控制台中有错误吗?还有,在大多数浏览器中,当用户可以单击相应的工具栏按钮时,限制这些键有什么意义?@Downvoter可以发布原因。只有我没有再犯错误。忘记阻止f5。在好的浏览器中是不可能的,在其他浏览器中是不道德的。其他钥匙也是一样。@Brad M.你的建议不起作用。