2013-08-20 15 views
5

Ho un campo di input che non voglio che gli utenti incollino alcun valore in esso. Sto usando il seguente codice jQuery e funziona bene su desktop Browser e iPhone Safari. Il problema è che non funziona su browser Android.Come disabilitare 'Incolla' nel browser Android usando JQuery?

$('#no_paste').bind("paste", function(e) {     
     e.preventDefault(); 
}); 

Ecco il fiddle

+0

So che non è correlato alla domanda, ma perché disabilitare l'incolla? –

+0

Bene, i campi di input come email di conferma, password di conferma non dovrebbero essere incollati. – CalebC

+1

Non sono sicuro di essere d'accordo. Alcuni spunti di riflessione: [Impedire a un utente di incollare dagli Appunti in un campo modulo obbligatorio] (http://ux.stackexchange.com/q/21062/4487), [Devo consentire a un utente di copiare/incollare in una conferma campo di posta elettronica per un modulo di registrazione?] (http://ux.stackexchange.com/q/1488/4487) –

risposta

1

Ho provato questo su Galaxy SIII e il browser Android non sembra inviare l'evento paste. Tuttavia, invia ancora l'evento input dopo che qualcosa è stato incollato.

Se l'utente sta digitando un campo, verrà generato un evento input per ogni lettera. Tuttavia, se sta incollando, l'evento input verrà attivato una sola volta per l'intera stringa che è stata incollata. Sulla base di questa osservazione si può bloccare incollare in questo modo:

$('#ie').bind("input", function() { 
    var previousValue = $(this).data('old_value') || '', 
     newValue = $(this).val(); 

    if((newValue.length - previousValue.length) > 1) { 
     $(this).val(previousValue); 
    } 

    $(this).data('old_value', $(this).val()); 
}); 

Troverete JSFiddle here.

Si prega di notare che questo bloccherà anche il completamento automatico e tutte le altre tecniche di input strani che funzionano in modo simile (non ne conosco nessuno).

+0

Buon compromesso! Ma se l'utente incolla un singolo personaggio, funzionerebbe comunque. – CalebC

+0

@CalebC Certo, ma è difficile credere che qualcuno incolli l'intera e-mail/password lettera per lettera solo per evitare la protezione "incolla". Farlo è molto più complicato e complicato della digitazione, quindi qual è il punto? Tuttavia, se hai veramente campi di input in cui ti aspetti solo una lettera, fallo semplicemente: se è stato inviato l'evento "input" ma non è stato inviato alcun evento "keydown" prima di poterlo classificare come "paste". –

+0

Abbastanza giusto, lo segnerò come risposta. – CalebC