2012-03-13 17 views
5
events: { "paste .youtube-url" : "addUrl" } 

addUrl: function(){ 
    console.log(this.$(".youtube-url").val()); 

Więc powiedzmy I wklej „zły” w pierwszym polu tekstowym czasupasta zdarzenie zostanie zwolniony przed tekst w polu tekstowym

wyjście konsola (pusty ciąg znaków)

wtedy gdybym wklej dołączyć coś jak "koder"

wyjścia konsoli: Bad

zamiast co jest w pudełku "badcoder", myślę, że to dlatego, że zdarzenie pseudo paste jest uruchamiane przed wstawieniem tekstu.

Odpowiedz

8

Zamiast używać zdarzenia paste można użyć zdarzenia keyup, które jest uruchamiane, gdy ktoś wkleja się, ale także strzela tylko po zaktualizowaniu wartości wejścia.

UPDATE

Dobry komentarz od @Micah (i @JohnnyO). Oto dylemat znalazłam pracę:

$('input').on('paste', function() { 
    var that = this; 
    setTimeout(function() { 
     alert(that.value); 
    }, 0); 
});​ 

To ustawia timeout więc kod, który odczytuje wartość na wejściu jest prowadzony tylko po pozostałej części kodu w stosie został uruchomiony. Testowałem tylko w przeglądarce Chrome 21, ale zerowy limit czasu wydaje się działać.

Demo: http://jsfiddle.net/H4K4R/

+1

UWAGA: Jako #JohnnyO wzmianka o zdarzeniu 'keyup' nie zostanie wywołana, jeśli do wklejenia menu kontekstowego. – Micah

+0

@Micah Dobry połów. Ja ** zaktualizowałem ** moją odpowiedź inną metodą. – Jasper

+0

'events: {" change .youtube-url ":" addUrl "}' może być inną opcją, ale zdarzenie nie zostanie wywołane, dopóki fokus nie opuści pola tekstowego. – Micah

4

Odpowiedź przez @Jasper działa tylko podczas wklejania przez klawiaturę. Podczas używania myszy i menu kontekstowego do wklejenia nie otrzymasz zdarzenie keyup. Najlepszym wydarzeniem do obejrzenia jest wydarzenie "wejściowe". Niestety, w przypadku wersji IE przed 9, musisz zamiast tego oglądać zdarzenia "propertychange", ponieważ nie obsługują one "input". "propertychange" nie bańka, więc nie będzie w stanie połączyć się z tym wydarzeniem, tak jak robisz używając Backbone, a zamiast tego będzie musiał powiązać go bezpośrednio z elementem ".youtube-url".

Powiązane problemy