2012-06-15 28 views
9

Kullanıcı yazarken, bir metin kutusu denetiminin her değiştirilmesinde bir işlev çalıştırmak istiyorum. Olayların çoğu için .keyup() olayı iyidir. Ancak, tarayıcılar (Chrome veya Firefox gibi), metin kutusu denetimleri için otomatik tamamlama girişlerini önerebilir (büyük olasılıkla giriş denetiminin @ adı veya @id'i biliniyordur). Üste |jQuery olayı, bir metin kutusundaki önerilen öğenin seçimiyle mi?

Maalesef, "önerilen bir girdiye tıklandığında", aşağıdaki olaylardan hiçbirine sahip olamam. mümkün olduğunca

$('input#email') 
    .click(function() { console.log('click'); }) 
    .keyup(function() { console.log('keyup'); }) 
    .keydown(function() { console.log('keydown'); }) 
    .change(function() { console.log('change'); }) 
    .focus(function() { console.log('focus'); }) 
    .blur(function() { console.log('blur'); }); 

Her ne kadar (klavye ile seçilen .keyup() yangınlar), bir setInterval() periyodik kontrol kullanmaktan kaçınmak istiyorum.

Bu "öneri seç" olayını algılamanın bir yolu var mı?

cevap

8

uzakta propertychange olayı tıklamanızı gerektirir:

$('input').bind('input propertychange', function() { 

    var input = this.value.trim(); 
    [...] 

}); 
+2

Harika! Bunun için teşekkürler (bu projeden biraz uzakta olsa bile). Önerilen bir girişi tıklatırken (istendiği gibi) klavyeyle seçerken değil, tetiklendiğini not edin. Olay işleyicisini _keyup_ ile de kaydetmek bu boşluğu doldurmak için yararlı olabilir. – Myobis

5

Kısa yanıt hayır, öneri seçimini algılayacak bir olay yok. DOM mutasyon gözlemcilerine bakmayı deneyebilirsiniz, ancak bu kapak özniteliğinin değişip değişmediğinden emin değilim ve şu ana kadar bu API için çok az destek var.

Bu durumu gerçekten halletmeniz gerekiyorsa, o zaman tek seçeneğiniz setInterval olduğunu düşünüyorum.

Düzenleme: 3 yıl sonra jQuery ile birlikte yeni kabul edilen yanıtta (başlık altında mutasyon gözlemcileri kullandığını farz ediyorum) propertychange kullanabilirsiniz.

+0

Araştırmalarım bu sonuca yakın görünüyor. Girişiniz için teşekkürler. – Myobis

+0

'setInterval'ın yanı sıra, bir alan/tekstürün odaklandığı, mevcut değerini kopyaladığı ve odağı kaybettikten sonra değeriyle karşılaştığında daha net bir yaklaşım olduğunu düşünüyorum. Bir dezavantaj, sadece alanın odağı kaybettiğinde değiştiğini bilmenizdir. Bununla birlikte, bunun üstesinden gelmenin basit bir yolu, daha önce anlattığımın dışında bir “değişim” dinleyicisi de uygulamaktır. –

0

değişiklik olayı için çalışıyor gibi görünüyor, ama Bind

2

alternatif çözüm devre dışı otomatik tamamlama ve keyUp, keydown vb

gibi diğer olayları ele
<input type="text" name="foo" autocomplete="off" /> 
İlgili konular