2012-12-20 17 views
9

Mam zbindowanych zdarzenie pasty z wejścia:jquery przechwytując pasta wydarzenie

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

Everytime I Ctrl-V zwraca obiekt e zdarzeń.

Chcę uzyskać dane, które użytkownik zamierza wkleić do danych wejściowych.

sprawdzając obiekt zdarzenia znalazłem wartości w kilku miejscach, takich jak:

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

Ale te z nich zwraca wartość na wejściu po pastę stało. Więc jeśli wkleję tekst po wprowadzeniu innego ciągu, oba ciągi połączą się.

Przeszukałem internet i znalazłem tylko brzydkie rozwiązania flashowe.

Czy jest to czysty sposób to zrobić w jquery?

Myślałem o uzyskaniu całego tekstu z e.srcElement.value po uzyskaniu wartości wejściowej before z pasty, a następnie porównać oba ciągi i wyeliminować pierwszą część, zwracając przez przypadek wartość schowka.

+0

Czy to znaczy po prostu chcesz wyczyścić wkład przed wstawieniem skopiowany tekst? – PhearOfRayne

+0

@StevenFarley Chcę uzyskać ciąg, który użytkownik wkleił na wejście – jviotti

Odpowiedz

6

Może to jest to, co staramy się robić, a nie 100% pewne:

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

Czy możesz wyjaśnić ten kod? –

+1

Prawie :) Nadal muszę pobrać wklejoną wartość jako zmienną wewnątrz zdarzenia. Próbowałem tego: http://jsfiddle.net/jviotti/PMq6U/3/ alert powinien zwracać nową wartość. Zamiast tego nic nie zwraca, tak jakby została wywołana przed wartością val(). – jviotti

+0

@RicardoLohmann Ustawia wartość pustą, a następnie ustawia ją na wklejoną wartość. – jviotti

-1

Możesz użyć zdarzenia onbeforepaste, aby to zrobić.

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

Nie uruchamia się: http://jsfiddle.net/jviotti/9UsYC/7/ – jviotti

+0

Jakiej przeglądarki używasz? Działa dobrze w Chrome. – Licson

+0

dokumentacja? Nigdzie nie mogę znaleźć tego wydarzenia. Czy to jest specyficzne dla przeglądarki? – nickaknudson

2

clipboardData działa dla nowoczesnych przeglądarek (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

Wygląda na to, że nie działa w Firefoksie 46.x. –

+0

Zaktualizowałem kod dla Firefoxa – cuixiping

Powiązane problemy