JQueryを使用して入力フィールドにフォーカスを設定する方法


106

次のHTML構造があるとします。

<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>

これはページで数回繰り返され.bottomますが、ユーザーが.topdivのリンクをクリックしたときに、divの入力フィールドにフォーカスを設定するにはどうすればよいですか。

私は現在、.bottom以下のJQueryコードを使用してクリックでdivを正常に表示していますが、同時に入力フィールドにフォーカスを設定する方法を理解できないようです。

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

ありがとう!


あなたの質問にも回答return false;しましたが、イベントコールバックの最後にも実行していると思いますか?またはfunction(e) { e.preventDefault(); ..... }?そうでない場合、ブラウザはコールバックを実行した後にそのページに移動します。
Simshaun

@simshaunはどのページに移動しますか?
ローリングストーン

まあ、あなたの例では、そのリンクをクリックすると、example.comに移動します
シムショーン

ああ、そうです、頭を上げてくれてありがとう!
ローリングストーン

回答:


135

これを試して、フォーカスを最初の入力フィールドに設定します。

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

1
input&の間のスペース:first。jQueryは自動的にスプライスしますか?私はいつもそれがあるべきだと思っていましたinput:first
シムショーン

はい、どちらの方法でも記述できます。私は考えinput:first、他の方法を読みやすいようだが、それを書くために、より正式な方法かもしれません。しかし、それは私だけかもしれません:)
Justin Ethier

慣れているので、その空間を見ると自動的に「子要素」だと思い、混乱を解消するのに一秒かかると思います。しかし、ねえ、それは私だけです。どちらにしても機能するのはクールです。
Simshaun

@ジャスティン私は実際にそれを動作させるために少しそれを微調整する必要$(this).parent().siblings('div.bottom').find("input.post").focus();.find()ありました:しかし私が探していたセレクターです。興味深いことにinput :firstinput:firstうまくいきませんでした。
ローリングストーン

興味深いのは、おそらく入力がformタグ内にあるためです。とにかく、あなたがそれを働かせてうれしい!
ジャスティンエティエ2011


7

ジャスティンの答えは私にはうまくいきませんでした(Chromium 18、Firefox 43.0.1)。jQuery.focus()は視覚的な強調表示を作成しますが、テキストカーソルはフィールドに表示されません(jquery 3.1.0)。

https://www.sitepoint.com/jqueryhtml5-input-focus-cursor-positions/からインスピレーションを得て、入力フィールドにautofocus属性を追加しました。

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
私のために働いた。より単純なバージョンは次のようになります:$( '。class input')。focus(); $( '。class input')。prop( 'autofocus');
存在理由2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.