【问题标题】:How to use jQuery to prevent the space key from entering a space?如何使用jQuery防止空格键进入空格?
【发布时间】:2010-10-04 21:15:04
【问题描述】:

我认为在表单输入时劫持空格键是一件简单的事情,这样它就可以像连字符一样起作用。一般来说,jQuery 让这样的事情变得非常简单。

我试过的代码是这样的:

        $("#StreamUrl").keydown(function (e) {
            if (e.keyCode == 32) return 109;
        });

但这没有任何效果。我尝试了一个更简单的脚本:

        $("#StreamUrl").keydown(function (e) {
            //if (e.keyCode == 32) return 109;
            alert(e.keyCode);
        });

此脚本在空格键上正确提示 32,在连字符键上提示 109。另外,我没有 JavaScript 错误。

为什么if (e.keyCode == 32) return 109; 不起作用?当我用if (e.keyCode == 32) alert("space!!"); 替换该行时,我得到了正确的警报,所以我知道if 正在正确返回true

什么给了?

编辑 - 解决方案

感谢@Nick 指出复制粘贴问题。我最终得到了一点混合动力。这是我已经开始工作的代码,它既流畅又能处理复制/粘贴。

        $("#StreamUrl").keydown(function (e) {
            if (e.keyCode == 32) {
                $(this).val($(this).val() + "-"); // append '-' to input
                return false; // return false to prevent space from being added
            }
        }).change(function (e) {
            $(this).val(function (i, v) { return v.replace(/ /g, "-"); }); 
        });

【问题讨论】:

  • 您的代码可以正常工作,但以下情况除外:如果用户使用箭头键移动插入符号,然后键入空格,则连字符会添加到字段末尾而不是插入在插入符号位置。
  • 这个解决方案可以通过使用这里的一些技巧来改进:stackoverflow.com/questions/4085312/…

标签: javascript jquery


【解决方案1】:

问题是return 109 没有做你想让它做的事情。在事件处理程序中,您返回 true 或 false 取决于您是否希望浏览器执行默认操作。在keydown 中,您将返回 false 以防止字符被插入。

$("#StreamUrl").keydown(function (e) {
     if (e.keyCode == 32) { 
       $(this).val($(this).val() + "-"); // append '-' to input
       return false; // return false to prevent space from being added
     }
});

jsfiddle example

【讨论】:

  • 虽然这确实回答了直接的问题,但并没有解决问题,例如我可以在其中粘贴一个空格并继续。
  • 诀窍是使用 keydown() 抢占浏览器的默认操作。
【解决方案2】:

通常希望在此处使用keyup 事件,它会在添加空间之后触发,这样的事情会更容易一些:

$("#StreamUrl").bind("keyup change", function () {
  $(this).val(function(i, v) { return v.replace(/ /g,"-"); });
});

Try it out here,它的作用是允许添加空格,然后通过将函数传递给.val() 立即替换连字符的空格。对于旧版本的 jQuery,它看起来像这样:

$("#StreamUrl").bind("keyup change", function () {
  $(this).val($(this).val().replace(/ /g,"-"));
});

这甚至适用于粘贴内容的人,这是绕过keydown 验证的简单方法。

【讨论】:

  • iv 代表什么?
  • keyupkeydown 有什么优势? Daniel 的代码运行良好(至少在 Chrome 中),即使您保持空格被压低,并且它不像突然用破折号替换空格那样在视觉上不和谐(尤其是在空格被压很长时间之后)。
  • 感谢您的代码.. 但我更喜欢 Daniels 代码,因为空格字符甚至从未执行过......因此避免了替换函数完成所需的瞬间,并且光标不会不要跳来跳去。
  • @quakkels - 你可以复制/粘贴,为什么每个人在设计验证时都会忘记这一点?
  • @quakkels - 我认为您作为 UI 设计师的优先事项有点倒退,但无论如何都行得通。我不会永远期望用户在输入 URL 时按空格键,并且如果他们这样做会非常、非常罕见它仍然可以工作,但是如果您希望使用更多代码来达到相同的目标,那就这样吧。功能,然后出现,总是。我的问题更多的是一个公认的答案,没有考虑到 very 常见的复制/粘贴案例被接受以及 next 人盲目使用它,这使得这个问题/答案非常资源不好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-01
  • 2019-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-28
  • 2012-05-05
相关资源
最近更新 更多