如何检测空间是否已退格或已删除

时间:2012-12-05 17:03:05

标签: javascript jquery keycode backspace

我需要找到一种方法来检测空间是否被删除或退格,并在这种情况下运行一个函数。我正在使用JavaScript / jQuery进行此操作。

我知道我可以使用以下方式获取删除或退格键:

$(this).keyup(function(event) {
        event.keyCode

但是,我不知道如何判断delete或backspace命令是否删除了一个空格?

非常感谢任何建议。

4 个答案:

答案 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);
});

http://jsfiddle.net/ymhjA/1/

更新样本:

$("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);
});​

http://jsfiddle.net/ymhjA/4/

答案 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);
    }
  }

});