【问题标题】:Prevent user hitting Enter except Textarea防止用户按除 Textarea 之外的 Enter
【发布时间】:2015-04-01 04:19:24
【问题描述】:

我有一个相当复杂的表单,它有多个阶段,包含许多不同的文本字段和文本区域。它在使用的条形码中使用的环境默认情况下会按 Enter,这是由他们选择的,因为他们使用它们扫描大量产品,因此关闭 Enter 功能已成为不行。

我正在使用一个表单向导脚本,它在输入阶段处理客户端验证。该脚本在填写表单时被按回车键中断,并在页面刷新之前拒绝提交。

<a href="javascript:;" class="btn green button-submit">Submit <i class="m-icon-swapright m-icon-white"></i></a>

我有以下代码可以防止在表单上输入并允许在单击上面的链接时提交表单。

$(window).keydown(function (event) {
    if (event.keyCode == 13) {
        event.preventDefault();
        return false;
    }
});

但是,这会阻止在 textarea 中使用 enter。我做了一些研究并尝试使用 jQuery 中的 is() 运算符

$(document).ready(function () {
    $(window).keydown(function (event) {
        if (event.keyCode == 13 && !event.is("textarea")) {
            event.preventDefault();
            return false;
        }
    });
});

这不起作用,它无法阻止输入中的 enter 键,并像以前那样阻止表单提交。

如果验证通过表单,最后这是处理提交表单的 javascript

$('#form_wizard_1 .button-submit').click(function () {
    // Can put more onsubmit processing here
    document.getElementById('submit_form').submit();
}).hide();

任何人都可以建议我如何防止所有输入上的输入键,除了文本区域。我不假装自己是一名 JavaScript 开发人员,尽管我正在努力学习。以下是我阅读过的文章,或者尝试修改代码,或者未能理解它如何以正确的方式应用于我:

Prevent users from submitting a form by hitting Enter

Prevent Users from submitting form by hitting enter #2

disable enter key on page, but NOT in textarea


*关于最后一个链接,我需要一个全局分辨率来自动阻止表单中可能存在的所有文本区域。

一如既往,感谢您的帮助。

【问题讨论】:

  • 你试过!$(event.target).is("textarea")
  • 我不完全确定您使用的是什么脚本以及它是如何中断...
  • 通过我的研究我不知道这存在,您能否将其发布为正确的回复,以便我可以投票并接受它,这完全符合预期。

标签: javascript jquery forms


【解决方案1】:

使用!$(event.target).is("textarea")
也可以使用event.which(而不是event.keyCode;jQuery 为xBrowser 对其进行规范化)或使用event.key

jQuery(function($) { // DOM ready

  $('form').on('keydown', function(ev) {
    if (ev.key === "Enter" && !$(ev.target).is('textarea')) {
      ev.preventDefault();
      console.log("ENTER-KEY PREVENTED ON NON-TEXTAREA ELEMENTS");
    }
  });

});
<form>
  <input name="inp" placeholder="Click here and hit Enter" type="text">
  <textarea name="txa" placeholder="Click here and hit Enter"></textarea>
  <input type="submit">
</form>

<script src="//code.jquery.com/jquery-3.1.0.js"></script>

【讨论】:

  • 我进行了快速搜索 - 但是为了验证,console.log 不会在不支持这些调试功能(又名 FireBug 或 chrome 内置调试​​)的浏览器中引起问题
猜你喜欢
  • 1970-01-01
  • 2013-07-12
  • 1970-01-01
  • 2018-10-07
  • 1970-01-01
  • 2010-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多