JQuery kullanarak Giriş Alanına Odaklanma Nasıl Ayarlanır


106

Aşağıdaki HTML yapısı göz önüne alındığında:

<div class="wrapper">
    <div class="top">
        <a href="http://example.com" class="link">click here</a>
    </div>
    <div class="middle">
        some text
    </div>
    <div class="bottom">
        <form>
            <input type="text" class="post">
            <input type="submit">
        </form>
    </div>
<div>

sayfada birkaç kez tekrarlanacaksa .bottom, bir kullanıcı div'deki bağlantıyı tıkladığında div'deki giriş alanına odağı nasıl ayarlayabilirim .top?

Şu anda .bottomaşağıdaki JQuery kodunu kullanarak div'in tıklamada başarılı bir şekilde görünmesini sağlıyorum, ancak aynı zamanda giriş alanına odaklanmanın nasıl ayarlanacağını anlayamıyorum.

$('.link').click(function() {
    $(this).parent().siblings('div.bottom').show();
});

Teşekkürler!


Sorunuz yanıtlandı, ancak aynı zamanda: return false;Olay geri aramasının sonunda da çalıştığınızı varsayıyorum ? Veya function(e) { e.preventDefault(); ..... }? Değilse, tarayıcınız geri aramayı gerçekleştirdikten sonra o sayfaya gidecektir.
simshaun

@simshaun hangi sayfaya gider?
yuvarlanan taş

Sizin örneğinizde, bu bağlantıya tıkladığınızda ornek.com'a gider .
simshaun

oh, bu doğru, uyarılar için teşekkürler!
yuvarlanan taş

Yanıtlar:


135

Odağı ilk giriş alanına ayarlamak için şunu deneyin:

$(this).parent().siblings('div.bottom').find("input.post").focus();

1
input& Arasındaki boşluk :first. JQuery bunu otomatik olarak ekler mi? Hep olması gerektiğini düşünmüşümdür input:first.
simshaun

Evet, her iki şekilde de yazabilirsiniz. Sanırım input:firstbunu yazmanın daha resmi bir yolu olabilir, ancak diğer şekilde okumak daha kolay görünmektedir. Ama belki bu sadece benim :)
Justin Ethier

Sanırım buna çok alıştığım için, mekanı gördüğümde otomatik olarak "alt öğe" diye düşünüyorum ve kafamı karıştırmak bir saniye sürüyor. Ama hey, bu sadece benim. Her iki şekilde de çalışması harika.
simshaun

@justin, çalışması için biraz ince ayar yapmak zorunda kaldım: $(this).parent().siblings('div.bottom').find("input.post").focus();ama .find()aradığım seçici. İlginç bir şekilde input :firstne de input:firstişe yaramadı.
yuvarlanan taş

İlginç, büyük olasılıkla giriş bir formetiket içinde olduğu için . Her neyse, işe gitmene sevindim!
Justin Ethier


7

Justin'in cevabı benim için işe yaramadı (Chromium 18, Firefox 43.0.1). jQuery .focus(), görsel vurgu oluşturur, ancak metin imleci alanda görünmez (jquery 3.1.0).

Https://www.sitepoint.com/jqueryhtml5-input-focus-cursor-positions/'dan esinlenerek , giriş alanına ve işte otomatik odaklama özelliğini ekledim !

function addfield() {
    n=$('table tr').length;
    $('table').append('<tr><td><input name=field'+n+' autofocus></td><td><input name=value'+n+'></td></tr>');
    $('input[name="aa"'+n+']').focus();
}

1
Benim için çalıştı. Daha basit sürüm şu şekildedir: $ ('. Class input']. Focus (); $ ('. sınıf girişi']. prop ('otomatik odak');
raison
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.