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