2010-07-12 21 views
6

İki giriş alanım var. numaralı telefonun #input üzerinde olmaması durumunda kullanıcının numaralı telefonu tıkladığı yerde odağı zorlamak istiyorum. Bunun gibi bir şey denedim, ancak girdi belgenin bir parçası olduğu için işe yaramıyor.Odaklanma özelliğine sahip tek bir öğeye odaklanın. (jQuery)

$("#area").focus(); 
$(document).click(function() { $("#area").focus() }; 
$("#input").click(function() { $("#input").focus() }; 

Düşünceler?

$("#area").focus(); 
$(document).click(function() { $("#area").focus() }); 
$("#input").click(function(e) { e.stopPropagation(); $("#input").focus() }); 

için

cevap

10

değiştirecektirler Bu belgeye kabardığını gelen olayı durur ve sadece normal bir tıklayarak yaparken fokurdayan etkinliği iptal gerekir #input

+1

$ (belge) .click (function() {. $ ("# alanı") odak()}; $ olmalıdır (belge) .click (function() {$ ("#area"). focus()}); –

1

tarafından yakalanacak girişleri, olay işleyicinizde false değerini döndürerek veya e.stopPropagation() numaralı telefonu arayarak.

Olay işleyicileri atandığınız siparişin önemli olup olmadığından emin değilim, ancak önce #input etkinliğini yerleştirmeyi deneyebilirsiniz.

1

stopPropogation çözümü, önermek üzere olduğumdan daha basit, ancak muhtemelen bu diğer seçeneği tartışmaya değer. Olayın target mülkiyet girişinizi olup olmadığını görmek için

$(document).click(function(event) { ... 

ve onu test: Eğer var o ilk işlevinde, bir jQuery normalize olay nesnesidir fonksiyonu, ilk argüman alarak deneyebilirsiniz :

$(document).click(function(event) { 
    if(! (event.target == $("#input").get(0))) 
     $("#area").focus(); 
} 
+1

+1, bunun bir yararı, her iki durumda da sadece bir işlevi yerine getirmenizdir. Eklenen dezavantajı ise IE için karmaşıklık katan event.srcElement 'e karşı test etmeniz gerektiğidir. –

+1

'event' kelimesinin IE'de ayrılmış bir anahtar kelime olduğunu unutmayın ve bunu değişken olarak kullandığınızda bir hata verecektir. Ayrıca, sağladığınız kontrol, daha basit (ve daha kısa) olarak yazılabilir: if ($ (event.target) .is ('# input')) ' –

İlgili konular