【问题标题】:How to restrict keyboard key events in web application?如何限制 Web 应用程序中的键盘按键事件?
【发布时间】:2013-12-30 14:47:47
【问题描述】:

我正在做安全的网络应用程序。我的客户要求是不允许应用程序使用 F5 刷新。

还可以限制 EscBackspace 键的事件。

我使用的是 jQuery 1.9.1。

我的代码如下。

我可以收到警报,但如果我按下 F5 按钮,我的页面会刷新。不知道为什么?

BackSpace 也返回上一页。

$(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;

    }

});

谁能指出我哪里出错了?

【问题讨论】:

  • switch (event.keyCode) { 改用event.which,这是 jQuery 规范关键事件的方式。
  • “但它似乎不起作用。” - 它似乎有什么作用?是否显示警报?您是否在控制台中遇到错误?另外,当在大多数浏览器中用户可以单击等效的工具栏按钮时,限制这些键的意义何在?
  • @Downvoter 可以贴出原因。那只是我没有再犯错。
  • 忘记阻止 f5。在好的浏览器中这是不可能的,而在其他浏览器中则是不道德的。其他键也一样。
  • @Brad M 。您的建议无效。

标签: javascript jquery jquery-events preventdefault


【解决方案1】:

here。尝试在输入框中输入一些内容,然后在框架上尝试“f5”、“esc”和“退格”键。它适用于 Mac Chrome 浏览器下的 jsFiddle,它也应该适用于您的浏览器。当你阻止你的事件时,你应该调用 stopProagation 函数。此外,当您调用 srcElement 时,您应该通过 event.originalEvent.srcElement 调用原始事件,因为规范化的 jquery event 不包含 srcElement 属性。在控制台中,它给出了未定义的属性错误。你也有错误,比如关注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;

    }

});

【讨论】:

    【解决方案2】:

    这是我的解决方案,

    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;
        }
    
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-11
      • 2010-10-05
      • 2017-05-10
      • 1970-01-01
      • 2012-08-10
      • 1970-01-01
      • 1970-01-01
      • 2013-03-12
      相关资源
      最近更新 更多