我需要找到一种方法来检测空间是否被删除或退格,并在这种情况下运行一个函数。我正在使用JavaScript / jQuery进行此操作。
我知道我可以使用以下方式获取删除或退格键:
$(this).keyup(function(event) {
event.keyCode
但是,我不知道如何判断delete或backspace命令是否删除了一个空格?
非常感谢任何建议。
答案 0 :(得分:2)
绑定到keydown并比较之前和之后的值,看它是否缩小了。
$(input).keydown(function(){
var currVal = this.value, self = this;
setTimeout(function(){
if ( currVal.length > self.value.length ) {
console.log(currVal.length - self.value.length + " characters have been removed.");
}
},0);
});
更新样本:
$("input").keydown(function() {
var currVal = this.value,
self = this;
setTimeout(function() {
if (currVal.length - self.value.length === 1) {
var origVal = $.grep(currVal.split(""),function(val){
return val === " ";
});
var newVal = $.grep(self.value.split(""),function(val){
return val === " ";
});
if ( origVal.length != newVal.length ) {
console.log("a space was removed");
}
}
}, 0);
});
答案 1 :(得分:2)
预先缓存该值(在按键上设置一个值)并与按键后的值进行比较。这是确定已经删除了一个或多个空格的唯一方法。任何键的检查都依赖于你能够找出可能的键可以移除空间,并且可能会留下空洞。
例如,选择单词的最后一个字母及其后面的空格,如果我们按下最后一个字母,它将删除空格。但按下的键不是退格键或删除键。
答案 2 :(得分:2)
见这里:http://jsfiddle.net/Txseh/
(function(){
var currentWhitespaceCount;
$("input").keyup(function(e){
var newCount = ($(this).val().match(/\s/g) || []).length;
if (newCount < currentWhitespaceCount)
alert("You removed one or more spaces, fool.");
currentWhitespaceCount = newCount;
});
})();
它跟踪输入中当前的空白字符数,如果数字下降,它会发出警报(或做任何你想做的事情)。
答案 3 :(得分:1)
实际上这是我的代码http://jsbin.com/atuwez/3/edit
var input = $('#input'),
afterLength,
beforeLength;
input.on({
'keydown': function () {
beforeLength = input.val().split(/\s/).length;
},
'keyup': function(event) {
var key = event.keyCode || event.charCode;
if( key == 8 || key == 46 ) {
afterLength = input.val().split(/\s/).length;
console.log(beforeLength == afterLength);
}
}
});