这涉及HTML + JS和/或JQuery:
我会对之前的帖子发表评论,但我没有评论声誉或因某些原因无法发表评论。
Josh Stodola在第一部分中的优秀代码如下:
$(function() {
var txt = $("#myTextbox");
var func = function() {
txt.val(txt.val().replace(/\s/g, ''));
}
txt.keyup(func).blur(func);
});
这很有效,除了.replace将光标放在每个keyup的字符串末尾(至少在IE8和Chrome中)。 结果,它呈现左和右。右光标键没用,这在输入框内是必需的。
有没有办法增强上面的代码,以便光标键不会激活它,但是文本仍然可以动态更新?
答案 0 :(得分:2)
更新功能:
var func = function(e) {
if(e.keyCode !== 37 && e.keyCode !== 38 && e.keyCode !== 39 && e.keyCode !== 40){
txt.val(txt.val().replace(/\s/g, ''));
}
}
答案 1 :(得分:2)
最佳解决方案是避免使用关键事件来捕获文本输入。他们不是这项工作的最佳工具。相反,您应该使用HTML5 oninput
事件(在每个当前主要浏览器的最新版本和最新版本中都支持),并在旧版本的Internet Explorer中使用onpropertychange
:
var alreadyHandled;
txt.bind("input propertychange", function (evt) {
// return if the value hasn't changed or we've already handled oninput
if (evt.type == "propertychange" && (window.event.propertyName != "value"
|| alreadyHandled)) {
alreadyHandled = false;
return;
}
alreadyHandled = true;
// Your code here
});
这些事件不会触发不会导致文本输入的键 - 当你将tab转换回表单元素并且生成的keyup事件导致页面的脚本向前移动焦点时,你是不是只讨厌它再次?
关键事件的其他好处:
keyup
中所示。这意味着在对文本进行任何调整之前,您不会出现视觉延迟。答案 2 :(得分:1)
尝试:
$(function() {
var txt = $("#myTextbox");
var func = function(e) {
if(e.keyCode != "37" && e.keyCode != "38" && e.keyCode != "39" && e.keyCode != "40"){
txt.val(txt.val().replace(/\s/g, ''));
}
}
txt.keyup(func).blur(func);
});
答案 3 :(得分:0)
$(function() {
var txt = $("#myTextbox");
var func = function() {
txt.val(txt.val().replace(/\s/g, ''));
}
txt.keyup(function(evt){
if(evt.keyCode < 37 || evt.keyCode > 40) {
func;
}
}).blur(func);
});
这样的事情应该这样做。如果键码不是37,38,39或40(四个箭头键键码),它将运行该功能。请注意,当按下任何其他键时,它实际上不会停止光标位置移动到结尾。为此,您需要跟踪当前光标位置。看一下这个link的jCaret插件,可以做到这一点