2012-12-05 6 views
6

공간이 삭제되었거나 백 스페이스가 발생했는지 감지하고이를 실행하는 방법을 찾아야합니다. JavaScript/jQuery에서이 작업을하고있다.공간이 백 스페이스 또는 삭제되었음을 감지하는 방법

은 내가 사용하여 삭제 또는 백 스페이스 키를 누르십시오를 얻을 수 있습니다 알고 : 그러나

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

, 내가 삭제 또는 백 스페이스 명령이 공간을 제거한 경우 말하는 방법을 몰라?

모든 제안 사항에 대해 매우 감사드립니다.

+0

입니다 삭제 되나요? – koopajah

+0

공간을 감지해야합니까 아니면 텍스트와 혼합되어있을 수 있습니까? – dmi3y

+0

@ dmi3y 제거 할 공간 만 감지하면됩니다. 여러 문자 삭제를 처리하는 다른 뭔가가 있습니다. – Baxter

답변

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

그것은 입력에서 공백 문자의 현재 수를 추적하고, 지금까지 숫자가 다운되면, 그것은 경고 (또는 당신이 원하는 않습니다). 당신은 백 스페이스 또는 당신이 당신의 입력 요소에 caret의 현재의 위치를 ​​확인하고 이전하는 경우가 그 것이다 공간이 후/확인을 누르면 삭제 키를 감지 할 때

+0

구현이 간단하고 완벽하게 작동합니다. 감사합니다! – Baxter

+0

이 하나가 작동하지 않습니다 ... 시도 크롬, 파이어 폭스, 사파리 ... – suMi

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/

+0

이것은 OP의 질문에 대답하지 않습니다. – Shmiddty

+0

@Shmiddty : 그렇습니다. 어떤 방법 으로든 공간을 제거하면 여기에 표시됩니다. –

+0

공간이 제거되었는지 여부를 판별하는 데는 여기에 아무것도 없습니다. 이렇게하면 어떤 문자가 제거되었는지 알 수 있습니다. – Shmiddty

2

캐시 값이 미리 (누르기에 값을 설정) 및 키 누름 후의 값과 비교한다. 이는 하나 이상의 공백이 제거되었음을 확실하게 알 수있는 유일한 방법입니다. 어떤 키를 검사하는 것은 가능한 키가 공간 제거를 달성 할 수 있는지에 따라 달라지며 구멍을 남길 가능성이 높습니다.

예를 들어 단어의 마지막 문자와 그 뒤에 오는 공백을 선택하면 마지막 문자를 누르면 공백이 제거됩니다. 그러나 눌린 키는 백 스페이스 나 삭제가 아닙니다.

+0

괜찮습니다. 다른 모든 문자는 keyup()에서 함수를 호출합니다. 백 스페이스를 처리하고 다르게 삭제하려는 경우 delete 또는 backspace가 공백을 제거한 경우에만 함수를 호출하고 그렇지 않으면 해당 명령을 무시하고 싶습니다. – Baxter

+0

미리 값을 캐시하고 키 누르기 후에 값과 비교하는 방법의 예를 제공 할 수 있습니까? – Baxter

+1

@Baxter 그건 내 코드가하는 것과 정확히 같습니다. –

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

});