【问题标题】:jQuery - Disable keydown in input and textareasjQuery - 在输入和文本区域中禁用 keydown
【发布时间】:2017-04-14 01:42:40
【问题描述】:

我正在使用箭头键(和 A、W、D)在页面之间导航。

如何禁用 textareas 和 inputfields 的 keydown 功能?

 $(document).keydown(function(e) {
    开关(例如){
        案例 65:
            leftArrowPressed();
            休息;
        案例 37:
            leftArrowPressed();
            休息;
        案例 68:
            rightArrowPressed();
            休息;
        案例 39:
            rightArrowPressed();
            休息;
        案例 72:
            homePressed();
            休息;
        案例 87:
            homePressed();
            休息;
    }
});

【问题讨论】:

    标签: javascript jquery keydown


    【解决方案1】:

    你可以使用这个(需要 Internet Explorer 9+):

    function leftArrowPressed() { console.log('left pressed'); }
    function rightArrowPressed() { console.log('right pressed'); }
    function homePressed() { console.log('home pressed'); }
    
    $(document).keydown(function(e) {
        var el = document.activeElement;
        try {
            if (el && el.selectionStart !== undefined || el.isContentEditable) {
                console.log('skip');
                return; // active element has caret, do not proceed
            }
        } catch (ex) {}
        var f = {
            65: leftArrowPressed,
            37: leftArrowPressed,
            68: rightArrowPressed,
            39: rightArrowPressed,
            72: homePressed,
            87: homePressed
        };
        if (f[e.which]) f[e.which]();
    });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <input value="test">
    <input type="checkbox">
    <textarea>test
    </textarea>
    <div contenteditable>test</div>

    【讨论】:

    • 哇,这让我印象深刻!非常非常感谢!
    【解决方案2】:
    $(document).keydown(function (e) {
                var element = e.target.nodeName.toLowerCase();
                if ((element != 'input' && element != 'textarea') || $(e.target).attr("readonly") || (e.target.getAttribute("type") ==="checkbox")) {
                    if (e.keyCode === 8) {
                        return false;
                    }
                }
    

    });

    【讨论】:

    • 这应该如何工作? != 不表示“如果不是”吗?
    【解决方案3】:

    由于您使用的是 jQuery:

    $("input, textarea").on("keydown keyup",function(e){e.stopPropagation();});
    

    ...你只需要(sn-p 中的其余代码并不重要,仅用于概念验证)

    $("input, textarea").on("keydown keyup",function(e){e.stopPropagation();});
    $(document).keydown(function(e){console.log("key pressed: "+e.which);});
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
    <input type="text" value="Test input" />&nbsp;<textarea style="height:18px;">Test textarea</textarea>&nbsp;<div style="display:inline; border: 1px solid black;">Test div</div>
    <div>1. Just click somewhere in the results area and start typing. Watch the console.<br />2. Then click inside the input/textarea and do the same. Nothing will happen.</div>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-05
      • 2011-10-29
      • 1970-01-01
      相关资源
      最近更新 更多