【问题标题】:jQuery.on('keydown') when key is "enter" is being intercepted (?) and won't workjQuery.on('keydown') 当键为“enter”时被拦截(?)并且不起作用
【发布时间】:2015-07-14 23:33:39
【问题描述】:

我正在修改大量现有应用程序。在此应用程序中,页面顶部有一个搜索栏。我需要记录用户在搜索栏中按下“Enter”的时间,以便触发一些逻辑。

看起来很简单。我可以只使用 jQuery keydown 甚至 keypress 事件来记录按下的键,然后如果键值与“Enter”的 13 匹配,我可以继续。

<form action="https://www.google.com" method="get" target="_blank">
    <input id="search-field"/>
</form>

<script>
    $(document).on('keydown', "#search-field", function (e) {
        if (e.which == 13)
        {
            //"some logic"
        }
    });
</script>

这会捕获每个按键除了“输入”!当我在 JavaScript 中创建 alert(e.which); 时,每个键的值都会弹出,但是当我尝试“输入”时,它只是提交表单并加载新页面而不会触发警报。

我的问题:在不知道有关搜索框的现有代码(我几乎没有访问权限)的情况下,有什么办法可以让这个keydown 事件触发?为什么会失败?

注意:我必须使用这种格式的jQuery.on()来处理事件

【问题讨论】:

    标签: jquery html events jquery-on


    【解决方案1】:

    您必须阻止表单的正常行为。在您的逻辑中使用:e.preventDefault() 以防止提交表单。另外,请考虑改用事件keyUp

    【讨论】:

    • e.preventDefault() 在此事件处理程序中阻止了除“Enter”之外的所有内容。也许有东西在我的事件处理程序之前访问它?
    • 甚至之后。如果表单提交发生在另一个事件中,例如“submit”或“keyUp”,阻止“keyDown”将不起作用。您可以通过添加搜索结果 e.stopPropagation(); 来停止尝试阻止事件冒泡到父元素;
    • 也许也尝试停止传播?我不太确定,但可能是 keydown 正在传播到
    • 即使在事件中添加preventDefault()stopPropagation() 也不会阻止表单提交或让我获取我的enter.click()。它可以防止其他键(例如“退格”)操作,但 enter 仍然在某处被截获,并且它不会在我的函数中注册它被按下。谁知道发生了什么
    【解决方案2】:

    我不知道如何规避其他事件流程。但我确实找到了阻止我的密钥被识别的原因:

    在文件Site.js 中有一些JavaScript:

    $('#SearchTerm').keydown(function (event)
        {
            return handleKey(event);
        });
    
        $('#SearchTerm').keyup(function (event)
        {
            // Some stuff here...
            return false;
        }
    

    这个文件包含在我拥有的 JavaScript 文件之前。因为它是第一个并且有自己的keydown/keyupevents,所以在按键有机会访问我自己的脚本之前,它正在执行它们并执行自己的e.preventDefault()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-29
      • 1970-01-01
      • 1970-01-01
      • 2017-08-18
      • 2020-02-28
      相关资源
      最近更新 更多