2011-09-15 51 views
5

Ödevimi yaptım ve çok sayıda soru kontrol ettim ama yine de işe yarayabileceğim bir şey bulamadım.jQuery ile tetikleme tuşu (tuş)

Arama girişlerim var. Kullanıcı örnek üzerine tıkladığında, arama giriş mektubumda "doktor" kelimesinin harfle yazılmasını istiyorum. Bunu çoktan önce $ ("# search") değiştirerek yapabilirdim. Normalde kullanıcı giriş girişi otomatik tamamlama div'a girdiğinde. Anahtar olay olayı tarafından tetiklenir. Sadece girdinin val özniteliğini değiştirirsem, otomatik tamamlama divı çıkmayacak, bu yüzden bir şekilde keydown olayını tetiklemem gerekecek.

bu çözüm buldu:

$("#example").click(function() {  
    $("#search").focus(); 
    var e = jQuery.Event("keyup"); 
    e.keyCode = 50;      
    $("#search").trigger(e);      
}); 

ama işe alamadım. Herhangi bir fikir lütfen? İşte

html görünür:

<input type="text" id="search" /> 
Example: <span id="example">doctor</span> 
+0

Başlığımda tuş açma olayı belirtiliyor, ancak bunun yalnızca anahtarlama olayıyla gerçekleştirilebileceği anlaşılıyor, bu nedenle kodda anahtar kullanıyorum. Her neyse, hiçbiri benim için çalışmıyor. – Nazar

+0

Ayrıca e.keyCode yerine e.which kullanmayı denedim. Hala hiçbir şey değişmez. Komut, focus() olayına kadar çalışır. Girdi odaklanır ve betiği yürütmeyi durdurur gibi görünür. – Nazar

cevap

8
$("#example").click(function() {  
    $("#search").focus(); 
    var e = jQuery.Event("keydown"); 
    e.keyCode = 50;      
    $("#search").trigger(e);      
}); 

ref: Definitive way to trigger keypress events with jQuery

+0

yapardım. Sanırım, sağladığım bağlantıdan bana uygun bir cevap buldum. Daha önce hiç bir yorum fark etmedim. Yorum yapmak için yapılan yorumlar @Nadia Alramli: > Hayır, kavramı anladın mı? Bu, > çalışmasına nasıl gideceği gibi değil. Tetikleyici yalnızca olay işleyicisini arayacaktır. Aslında > anahtarı basmayacaktır. Anahtarı basmanın etkisini simüle etmek istiyorsanız, > tuşunu sadece giriş değerine ekleyin ve olayı > aynı anda tetikleyin. - Nadia Alramli May 7 '09: 0:21 – Nazar

0

Daha iyi bir yol aşağı textChange event ziyade keyUp/üzerinde otomatik tamamlama tetiklemek etmektir. Böylece $("#search").val()'u kolay bir şekilde kullanabilirsiniz ve otomatik tamamlayıcı tetiklenecektir.

Eklendi bonus: Eğer textChange kullanırsanız vb fare bağlam menüsünü kullanarak kullanıcı kopya-macunlar metin (ve sekme veya ok tuşlarını tetiklemez) eğer o da otomatik tamamlama tetikleyecek

+0

Yanıt için teşekkürler! Bunu kesinlikle kontrol edeceğim. Böyle bir olayın olabileceğini bilmiyordum. Ancak, tuşlara basmamı filtreledim, böylece oklar basılırsa, otomatik tamamlama işlemi başlatılmaz. – Nazar

+0

Sadece tuşa basmayı tetiklemem gerektiğini anladım, çünkü kullanıcı örnek üzerine basıldığında, _doctor_ sözcüğü yazılacak ve otomatik tamamlama divı çıkacak. Sonra bir kez ok aşağı tetiklemek ve bir kez anahtar girmek için otomatik tamamlama div ilk öneri url'ye gidecek. Bir demo gibi bir şey olması gerekiyordu. – Nazar

+0

Elbette, ama eğer ben olsaydım, .textchange (autocomplete_handler) 've ayrı bir' .keydown (arrows_and_enter_handler) ' –