2012-12-20 14 views
9

ho rilegato un evento di pasta da un ingresso:jquery evento pasta di intercettare

$(document).ready(function(){ 
     $('.myInput').bind("paste",function(e) { 
      console.log(e); 
     }); 
});​ 

Ogni volta mi ha colpito CTRL-V che restituisce l'oggetto e evento.

Desidero ottenere i dati che l'utente sta per incollare nell'input.

Ispezionando l'oggetto evento ho trovato il valore in diversi luoghi come:

  • e.srcElement.value
  • e.target.value

Ma quelli restituiscono il valore in input dopo la pasta è accaduto. Quindi se inserisco del testo dopo aver inserito un'altra stringa, otterrò entrambe le stringhe concatenate.

Ho cercato su internet e non ho trovato altro che brutte soluzioni flash.

C'è un modo pulito per farlo in jQuery?

ho pensato su come ottenere l'intero testo con e.srcElement.value dopo aver ottenuto il valore di ingresso before la pasta, poi confrontare sia stringa ed eliminare prima parte, di ritorno dal consecuence il valore della clipboard.

+0

vuoi dire che si desidera solo per cancellare l'input prima viene inserito il testo copiato? – PhearOfRayne

+0

@StevenFarley Voglio ottenere la stringa che l'utente ha appena incollato sull'input – jviotti

risposta

6

forse questo è ciò che il vostro cercando di fare, non sicuro al 100%:

HTML:

<input type="text" id="test" class="myInput" value="This is some default text" />​ 

jQuery:

$(document).ready(function() { 
    $('input').on('paste', function (e) { //Attach paste event handler for all inputs 
     $(this).val('').val(e.target.value); //Clear the current value, then insert the value of the data that was pasted 
    }); 
}); 

Fiddle: http://jsfiddle.net/PMq6U/

+0

Puoi spiegare questo codice? –

+1

Quasi :) Ho ancora bisogno di ottenere il valore incollato come variabile all'interno dell'evento. Ho provato questo: http://jsfiddle.net/jviotti/PMq6U/3/ avviso dovrebbe essere restituito il nuovo valore. Invece non restituisce nulla, come se fosse invocato prima di val(). – jviotti

+0

@RicardoLohmann Imposta il valore su bianco e quindi lo imposta su valore incollato. – jviotti

-1

È possibile utilizzare l'evento onbeforePaste per farlo.

$(function(){ 
    $('#el').on('beforepaste',function(e){ 
     [...] 
    }); 
}); 
+1

Non viene attivato: http://jsfiddle.net/jviotti/9UsYC/7/ – jviotti

+0

Che browser stai utilizzando? Funziona bene in Chrome. – Licson

+0

documentazione? Non riesco a trovare quell'evento da nessuna parte. È specifico del browser? – nickaknudson

2

clipboardData funziona per i browser moderni (IE11 +, Firefox, Chrome ...).

$(document).ready(function(){ 
     $('.myInput').on('paste', function (e) { 
      var dt = e.originalEvent.clipboardData; 
      if(dt && dt.items && dt.items[0]){ 
       dt.items[0].getAsString(function(text){ 
        console.log(text); //the pasted content 
       }); 
      }else if(dt && 'getData' in dt){ 
       console.log(dt.getData('text')); //the pasted content 
      } 
     }); 
}); 

http://jsfiddle.net/6n10y0ds/9/

https://developer.mozilla.org/en-US/docs/Web/API/DataTransfer

+0

Sembra non funzionare su Firefox 46.x. –

+0

Ho aggiornato il codice per firefox – cuixiping