2012-12-05 5 views
6

Ho bisogno di trovare un modo per rilevare se uno spazio è stato cancellato o precedentemente ricoperti, ed eseguire una funzione, se questo è il caso. Sto lavorando su questo in JavaScript/jQuery.come rilevare che uno spazio è stato precedentemente ricoperti o eliminato

so di poter ottenere la stampa di cancellazione o Backspace chiave utilizzando:

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

Tuttavia, non so come dire se il comando di cancellazione o Backspace rimosso uno spazio?

molto riconoscente per eventuali suggerimenti.

+0

Quando si rileva un backspace o premuto di controllare la posizione corrente del cursore nel vostro elemento di input e controllare se prima/dopo che è uno spazio che sarà un tasto di cancellazione essere cancellato? – koopajah

+0

hai bisogno di rilevare solo lo spazio o potrebbe essere mescolato con il testo? – dmi3y

+0

@ dmi3y Ho solo bisogno di rilevare uno spazio rimosso. Ho qualcos'altro che gestisce l'eliminazione di più caratteri. – Baxter

risposta

2

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

tiene traccia del numero corrente di caratteri di spazio bianco in ingresso, e se mai il numero scende, avvisa (o fa quello che volete).

+0

Semplice da implementare e funziona perfettamente, grazie! – Baxter

+0

questo non funziona ... provato chrome, firefox, safari ... – suMi

2

legarsi al keydown e confrontare il valore prima e dopo per vedere se ha ridotto in dimensione.

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

campione Aggiornato:

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

Questo non risponde alla domanda dell'OP. – Shmiddty

+0

@Shmiddty: Sì, poiché qualsiasi rimozione di uno spazio tramite qualsiasi metodo verrà mostrata qui. –

+0

Non c'è niente qui per determinare se uno spazio è stato rimosso o meno. Questo ti consente di sapere quando QUALSIASI carattere è stato rimosso. – Shmiddty

2

cache il valore in anticipo (impostato un valore su pressione di un tasto) e confrontare con il valore dopo pressione del tasto. Questo è l'unico modo per sapere con certezza che uno o più spazi sono stati rimossi. Qualsiasi controllo delle chiavi si basa sul fatto che sei in grado di capire quali chiavi possibili potrebbero ottenere la rimozione di uno spazio, e probabilmente lascerà dei buchi.

Come esempio, selezionando la lettera finale di una parola e lo spazio che segue, se si preme l'ultima lettera rimuoverà lo spazio. Ma il tasto premuto non è backspace o delete.

+0

Questo va bene, ogni altro carattere chiama la funzione su keyup(). Voglio trattare backspace ed eliminare in modo diverso e chiamare la funzione solo se delete o backspace ha rimosso uno spazio altrimenti voglio ignorare quei comandi. – Baxter

+0

Potete fornire un esempio di come potrei memorizzare in cache il valore in anticipo e confrontarlo con il valore dopo la pressione del tasto? – Baxter

+1

@Baxter è esattamente ciò che fa il mio codice. –

1

in realtà qui è il mio codice 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); 
    } 
    } 

}); 
Problemi correlati