2013-03-03 13 views
8

Sto cattura di eventi in pasta con $('selector').on('input', function(event) { ... });jQuery utilizzando event.preventDefault() con il ('input')

Poi sto cercando di testare ciò che è stato incollato e se non passa la convalida, annullare la incolla con event.preventDefault(). Sfortunatamente, quando viene eseguita la funzione listener, il testo è già stato incollato e event.preventDefault() non esegue nulla.

Quindi qual è un buon modo per catturare gli eventi Incolla e se ciò che è stato incollato non convalida, annulla/previ l'incolla?

So che posso usare .on('paste', function(event) { ... }), ma questo non mi dà il testo che è stato incollato o il contenuto dell'elemento di input dopo l'incolla, a meno che io non usi setTimeout() con qualche minuto di attesa, e mi piacerebbe evitare l'uso di setTimeout().

+0

Puoi creare un esempio jsFiddle? – j08691

+0

'event.preventDefault()' impedisce l'azione predefinita e, quando si associa all'evento 'input', non ti impedisce realmente di digitare o incollare qualcosa in un input? Quando si memorizza nella cache il valore del contenuto incollato, sarà necessario differirlo per ottenere un valore, ma non "qualche minuto", impostare il timeout su zero e dovrebbe comunque funzionare. – adeneo

+0

Suppongo che sia ok se si imposta il timeout di '100ms' per acquisire il valore di un input su paste e validare piuttosto che un' minuto'. – SRy

risposta

-1

La mia comprensione dalla domanda è, non dobbiamo permettere che nessun dato venga incollato all'interno della casella di testo fino a quando ea meno che non passi una convalida specifica. Invece di utilizzare event.preventDefault(), possiamo acquisire il valore quando l'utente immette qualsiasi contenuto, utilizzando il listener on('input') e convalidarlo rispetto alla condizione specifica e se la convalida non riesce, svuotare il valore della casella di testo.

(questa è la soluzione se abbiamo ancora bisogno di utilizzare ascoltatore on('input') evento)

codice di esempio (sto usando console.log() per la stampa il valore incollato):

HTML:

<input type='text' id="selector" /> 

JS:

$(document).ready(function() { 
$('#selector').on('input', function (e){ 
     if(e.target.value !== "myValue"){ 
     $('#selector').val(''); 
    } 
    else{ 
     console.log(e.target.value); 
    } 
}); 
}); 
0

Provare a utilizzare l'evento .change di jquery.

Impostare il valore su bianco se il valore non soddisfa la condizione.

Problemi correlati