如何使用jQuery来防止空格键进入空格?

时间:2010-10-04 21:15:04

标签: javascript jquery

我认为在表单输入中劫持空格键是一件简单的事情,这样它就像连字符一样起作用。通常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, "-"); }); 
        });

2 个答案:

答案 0 :(得分:20)

问题是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

答案 1 :(得分:11)

>

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

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

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

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