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

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

yüzden ilk metin süresi içine "kötü" yapıştırmak Diyelimpaste olay kovuluyor

konsol çıkış: (boş bir dize) Ben yapıştırın o zaman

yerine kötü

: "kodlayıcısı"

konsol çıkış gibi bir şey eklemek "badcoder" kutusunun içinde ne var, sanırım bu metin yapıştırılmadan önce sözde paste olayı tetiklenir çünkü.

cevap

8

paste olayını kullanmak yerine, birisi yapıştırırsa ancak giriş değeri güncellendikten sonra yalnızca tetiklendiğinde tetiklenen keyup olayını kullanabilirsiniz.

GÜNCELLEME @Micah (ve @JohnnyO) den

İyi yorum. İşte işe yaradığı Çözüm şudur: girişin değerini okur kod yalnızca olmuştur yığınında kodunun geri kalanı yayınlandıktan sonra çalıştırılır, böylece

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

Bu bir zaman aşımı ayarlar. Yalnızca Chrome 21'de test ettim, ancak sıfır zaman-zaman aşımı bu işi yapıyor gibi görünüyor.

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

+1

NOT: #JohnnyO içerik menüsü yapıştırmak için kullanılırsa yangın olmayacak 'keyup' olayı bahseder gibi. – Micah

+0

@Micah İyi yakalama. ** ** cevabımı başka bir yöntemle güncelledim. – Jasper

+0

'etkinlikleri: {" change .youtube-url ":" addUrl "}' başka bir seçenek olabilir ancak etkinlik, metin kutusundan ayrılıncaya kadar etkin olmaz. – Micah

4

@Jasper tarafından cevap sadece klavye tarafından ne zaman yapıştırma çalışır. Fareyi ve yapıştırılacak içerik menüsünü kullanırken, bir tuş olayı almazsınız. İzlenecek en iyi etkinlik 'giriş' olaydır. Ne yazık ki, 9'dan önceki IE sürümleri için 'giriş' olayını izlemeniz gerekecek çünkü 'giriş' olayını izlemeniz gerekecek. 'propertychange', kabarcık oluşturmadığından, bu etkinliği Backbone kullanarak yaptığınız gibi bağlayamazsınız ve bunun yerine doğrudan '.youtube-url' öğesine bağlanmanız gerekir.