如何使用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) return 109;
工作? 当我用if (e.keyCode == 32) alert("space!!");
替换该行时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, "-"); }); });
问题是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的例子
你通常想在这里使用keyup
事件,在添加空间之后触发,这样的事情会更容易一些:
$("#StreamUrl").bind("keyup change", function () { $(this).val(function(i, v) { return v.replace(/ /g,"-"); }); });
在这里尝试一下 ,这样做是为了允许添加空间,但是通过将函数传递给.val()
立即替换连字符的空格。 对于旧版本的jQuery,它看起来像这样:
$("#StreamUrl").bind("keyup change", function () { $(this).val($(this).val().replace(/ /g,"-")); });
这甚至适用于粘贴内容的人,这是一种绕过keydown
validation的简单方法。