6

我需要找到一种方法来检测空格是否被删除或退格,如果是这种情况,则运行一个函数。我正在用 JavaScript / jQuery 做这个。

我知道我可以通过以下方式获得删除或退格键按下:

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

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

非常感谢任何建议。

4

4 回答 4

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/

于 2012-12-05T17:09:12.130 回答
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;
    });
})();​

它跟踪输入中当前空白字符的数量,如果数字下降,它会发出警报(或做任何你想做的事情)。

于 2012-12-05T17:24:17.080 回答
2

预先缓存该值(在按键上设置一个值)并与按键后的值进行比较。这是确定一个或多个空格已被删除的唯一方法。对键的任何检查都依赖于您能够找出哪些可能的键可以去除空间,并且可能会留下孔。

例如,选择一个单词的最后一个字母及其后面的空格,如果我们按下最后一个字母,它将删除空格。但是按下的键不是退格键或删除键。

于 2012-12-05T17:11:23.567 回答
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);
    }
  }

});
于 2012-12-05T17:36:02.387 回答