2009-08-05 7 views
7

Şu anda bir seçim kutusunun değerini kontrol edip, hemen yanındaki bir metin alanını etkinleştirecek ve umarım odağı ayarlayabilecek bir komut dosyası var. Ben giriş alanını gidilmesini sağlamaya çalışıyor şu anda bu varOdağı jQuery'de bir sonraki girişe mi ayarlıyorsunuz?

...

$("#assessed select").change(function() { 

    if($(this).val() == 'null') { $(this).next('input').attr("disabled", true); } 
    else { $(this).next('input').removeAttr("disabled"); } 

}); 

Ben 'odak' bit sıkışmış biraz dürüst olmak gerekirse, ben "$ çalıştı ediyorum (bu) .next ('giriş')) (odak;." o da bir JavaScript hatası getirmek vermedi rağmen ama bu herhangi bir fikir adamları memnun

$("#assessed select").change(function() { 

    if($(this).val() == 'null') { $(this).next('input').attr("disabled", true); $(this).next('input').focus(); } 
    else { $(this).next('input').removeAttr("disabled"); } 

}); 

..., hiç odaklanmak değil mi? Bu konuda gerçekten sıkışıp kaldım ve inşa ettiğim sayfaya çok basit ama çok kullanışlı bir katkı olurdu!

Teşekkür

+0

siz de HTML gönderir misiniz:

$("#assessed select").change(function() { var $this = $(this); if($this.val() === 'null') { $this.next() .attr("disabled", true); } else { $this.next() .removeAttr("disabled") .focus(); } }); 
RaYell

cevap

5

. Ayrıca, içindeki filtre gerekli değildir. sonraki() sadece bir sonraki kardeşe geri dönecektir. Filtre, temelde, sadece bir girdi veya verdiğiniz filtre ne olursa olsun, bir sonrakileri al. Sıradaki hedef olduğundan eminseniz, filtreyi eklemenize gerek yoktur. http://jqueryminute.com/set-focus-to-the-next-input-field-with-jquery/

$.fn.focusNextInputField = function() { 
    return this.each(function() { 
     var fields = $(this).parents('form:eq(0),body').find('button,input,textarea,select').not(':hidden'); 
     var index = fields.index(this); 
     if (index > -1 && (index + 1) < fields.length) { 
      fields.eq(index + 1).focus(); 
     } 
     else {fields.first().focus();} 
     return false; 
    }); 
}; 
+0

Kesinlikle mükemmel ve çok Kullandığımdan daha iyi bir çözüm, teşekkür ederim! – Nick

1

Ben senin sorun (en azından bazı tarayıcı/işletim sistemlerinde) bir engelli girişi denetimi odağı ayarlamak mümkün olmadığını olabileceğini düşünüyorum.

Aramanız focus() numaralı çağrı temel olarak yanlış blokta - if satırında değil else satırında olmalıdır. Bunun gibi

: önbelleğe bu jq nesne ile yukarıdaki cevabın Modifiye

$("#assessed select").change(function() { 

    if($(this).val() == 'null') { $(this).next('input').attr("disabled", true); } 
    else { $(this).next('input').removeAttr("disabled"); $(this).next('input').focus(); } 
}); 
+0

Hah! Çok teşekkürler Rob ... Fark ettim ki odağı 'if' ve 'else' değil! Absolute okul çocuğu hatası, üzgünüm ve çok teşekkürler - fark ettiğim kadar mesaj yazmamıştım :) – Nick

+0

$ (this) yerine birden çok kez çağırmak yerine $ (bu) önbelleğe almayı unutmayın – redsquare

+0

Bitti, teşekkürler :) – Nick

14

Ayrıca bir sonraki girdi almak için güzel bir küçük eklenti buldum?
+4

Alan bildirimine '.not (': gizli')' ekleyebilirim, böylece yalnızca görünen öğeler seçilir. Ayrıca, odağı ilk öğeye sarmak için 'else {fields.first(). Focus();}' ifadesini ekleyin. –

+0

Neden anne baba formalarını inceliyorsun: eq (0) önce? – Serge

+0

@Serge, giriş öğesinin bulunduğu ana formu seçer. "Eq (0)" ın gerekli olup olmadığını bilmiyorum, kodum tho, bu yüzden emin değilim. – TimoSolo