2012-12-05 21 views
6

Potrzebuję znaleźć sposób na wykrycie, czy spacja została usunięta lub cofnięta, i uruchomić funkcję, jeśli tak jest. Pracuję nad tym w JavaScript/jQuery.Jak wykryć, że spacja została cofnięta lub usunięta?

wiem, że mogę dostać Delete lub Backspace prasę za pomocą:

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

Jednak nie wiem, jak sprawdzić, czy polecenie Delete lub Backspace usuwa przestrzeń?

Bardzo wdzięczni za wszelkie sugestie.

+0

Gdy wykryje Backspace lub klawisz Delete wciśnięty sprawdzić aktualną pozycję karetki w elemencie wejściowego i sprawdzić, czy przed/po to przestrzeń, która będzie być usunięte? – koopajah

+0

potrzebujesz wykrycia tylko spacji lub może to być mieszane z tekstem? – dmi3y

+0

@ dmi3y Potrzebuję tylko wykryć usuniętą przestrzeń. Mam coś innego, co obsługuje wielokrotne usuwanie postaci. – Baxter

Odpowiedz

2

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

Śledzi bieżącą liczbę białych znaków w danych wejściowych, a jeśli kiedykolwiek liczba idzie w dół, to alarmuje (lub robi cokolwiek chcesz).

+0

Prosty w realizacji i działa idealnie, dziękuję! – Baxter

+0

ten nie działa ... wypróbowany chrom, firefox, safari ... – suMi

2

Powiąż z keydown i porównaj wartość przed i po, aby zobaczyć, czy został zmniejszony.

$(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/

Updated próbki:

$("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

To nie odpowiada na pytanie OP. – Shmiddty

+0

@Shmiddty: Tak, robi to, ponieważ pojawi się tutaj każde usunięcie miejsca za pomocą dowolnej metody. –

+0

Nie ma tu nic do określenia, czy usunięto miejsce. Dzięki temu będziesz wiedzieć, kiedy DOWOLNA postać została usunięta. – Shmiddty

2

Cache wartość uprzednio (ustawić wartość przy naciśnięciu) i porównać z wartością po naciśnięciu klawisza. Jest to jedyny sposób, aby wiedzieć z całą pewnością, że jedna lub więcej spacji zostało usuniętych. Każde sprawdzenie kluczy zależy od tego, czy potrafisz ustalić, jakie klucze mogą osiągnąć usunięcie miejsca i prawdopodobnie pozostawisz dziury.

Jako przykład, wybierając ostatnią literę słowa i spację po nim, jeśli naciśniemy ostatnią literę, usuniemy spację. Ale naciśnięty klawisz nie jest cofany ani usuwany.

+0

To jest w porządku, każdy inny znak wywołuje funkcję na keyup(). Chcę potraktować backspace i usunąć inaczej i wywołać funkcję tylko wtedy, gdy delete lub backspace usuną przestrzeń, w przeciwnym razie chcę zignorować te polecenia. – Baxter

+0

Czy możesz podać przykład tego, jak wczytać wcześniej wartość i porównać ją z wartością po naciśnięciu klawisza? – Baxter

+1

@Baxter to dokładnie to, co robi mój kod. –

1

rzeczywiście tutaj jest mój kod 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); 
    } 
    } 

}); 
Powiązane problemy