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

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

Так позволяет сказать, что я вставляю «плохо» в текстовое поле впервыепаста событие увольняют, прежде чем текст в текстовом поле

выход консоли: (пустая строка)

тогда, если я вставляю добавить что-то вроде "кодера"

консоли вывода: плохо

вместо о том, что внутри коробки «badcoder», я предполагаю, что это потому, что событие псевдо-вставки запускается перед вставкой текста.

ответ

8

Вместо использования события paste вы можете использовать событие keyup, которое срабатывает, если кто-то вставляет, но также срабатывает только после того, как значение для ввода было обновлено.

UPDATE

Хороший комментарий от @Micah (и @JohnnyO). Вот фикс я нашел работу:

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

Это устанавливает тайм-аут, так что код, который считывает значение на входе является работать только после того, как остальная части коды в стеке была запущена. Я тестировал только в Chrome 21, но нулевой тайм-аут, похоже, делает трюк.

Демо: http://jsfiddle.net/H4K4R/

+1

ПРИМЕЧАНИЕ. Поскольку #JohnnyO упоминает, что событие 'keyup' не срабатывает, если контекстное меню используется для вставки. – Micah

+0

@ Мика Хорошо поймать. Я ** обновил ** мой ответ другим методом. – Jasper

+0

'events: {" change .youtube-url ":" addUrl "}' может быть другой опцией, но событие не срабатывает, пока фокус не покинет текстовое поле. – Micah

4

Ответ на @Jasper работает только при вставке с помощью клавиатуры. При использовании мыши и контекстного меню для вставки вы не получите событие keyup. Лучшим событием для просмотра является событие ввода. К сожалению, для версий IE до 9 вам нужно будет наблюдать за событием «changechange», потому что они не поддерживают «ввод». «propertychange» не пузырится, поэтому вы не сможете подключить это событие, как вы делаете, используя Backbone, и вместо этого нужно будет привязать его непосредственно к элементу «.youtube-url».

Смежные вопросы