วิธีตั้งค่าโฟกัสบนฟิลด์อินพุตโดยใช้ 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>

ซึ่งจะถูกทำซ้ำหลาย ๆ ครั้งบนหน้าฉันจะตั้งค่าโฟกัสที่ช่องป้อนข้อมูลใน.bottomdiv ได้อย่างไรเมื่อผู้ใช้คลิกที่ลิงก์ใน.topdiv

ฉันกำลังทำให้.bottomdiv ปรากฏสำเร็จเมื่อคลิกโดยใช้โค้ด JQuery ด้านล่าง แต่ดูเหมือนจะไม่สามารถหาวิธีตั้งค่าโฟกัสบนช่องป้อนข้อมูลในเวลาเดียวกันได้

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

ขอบคุณ!


คำถามของคุณได้รับคำตอบแล้ว แต่ฉันคิดว่าคุณกำลังดำเนินการreturn false;ในตอนท้ายของการโทรกลับของเหตุการณ์ด้วย? หรือfunction(e) { e.preventDefault(); ..... }? มิฉะนั้นเบราว์เซอร์ของคุณจะไปที่หน้านั้นหลังจากเรียกใช้งานการโทรกลับ
simshaun

@simshaun นำทางไปยังหน้าใด
หินกลิ้ง

ดีในตัวอย่างของคุณเมื่อคุณคลิกลิงค์ที่มันจะไปexample.com
simshaun

โอ้ใช่แล้วขอบคุณที่แจ้งให้ทราบ!
หินกลิ้ง

คำตอบ:


135

ลองทำเช่นนี้เพื่อตั้งโฟกัสไปที่ช่องป้อนข้อมูลแรก:

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

1
ช่องว่างระหว่างinput& :first. jQuery ประกบกันโดยอัตโนมัติหรือไม่ input:firstฉันคิดเสมอว่ามันควรจะเป็น
simshaun

ใช่คุณสามารถเขียนได้ทางใดทางหนึ่ง ฉันคิดว่าinput:firstอาจจะเป็นวิธีที่เป็นทางการมากกว่าในการเขียนแม้ว่าจะอ่านวิธีอื่นได้ง่ายกว่าก็ตาม แต่นั่นอาจเป็นแค่ฉัน :)
Justin Ethier

ฉันเดาว่าเป็นเพราะฉันเคยชินกับมันมากเมื่อฉันเห็นพื้นที่ฉันจะคิดว่า "องค์ประกอบลูก" โดยอัตโนมัติและใช้เวลาสักวินาทีในการทำให้ตัวเองสับสน แต่เดี๋ยวก่อนนั่นก็แค่ฉัน มันเจ๋งมากที่ได้ผลทั้งสองทาง
simshaun

@ จัสตินฉันต้องปรับแต่งเล็กน้อยเพื่อให้ใช้งานได้: $(this).parent().siblings('div.bottom').find("input.post").focus();แต่.find()เป็นตัวเลือกที่ฉันกำลังมองหา น่าสนใจinput :firstหรือไม่input:firstได้ผล
หินกลิ้ง

ที่น่าสนใจอาจเป็นเพราะอินพุตอยู่ในformแท็ก อย่างไรก็ตามดีใจที่คุณไปทำงาน!
Justin Ethier

15

หากอินพุตอยู่ในกล่องโต้ตอบโมดอล bootstrap คำตอบจะแตกต่างกัน คัดลอกจากHow to Set focus เป็น text input ตัวแรกใน bootstrap modal หลังจากที่แสดงแล้ว นี่คือสิ่งที่จำเป็น:

$('#myModal').on('shown.bs.modal', function () {
  $('#textareaID').focus();
})  

ดี! สิ่งที่ฉันต้องการและได้รับการดีบักเป็นเวลาสองสามชั่วโมงพยายามหน่วงเวลาและแฮ็กทั้งหมด ... :-)
Kim Lundberg Stegenborg Madsen

7

คำตอบของจัสตินไม่ได้ผลสำหรับฉัน (Chromium 18, Firefox 43.0.1) jQuery .focus()สร้างไฮไลต์ภาพ แต่เคอร์เซอร์ข้อความไม่ปรากฏในฟิลด์ (jquery 3.1.0)

แรงบันดาลใจจากhttps://www.sitepoint.com/jqueryhtml5-input-focus-cursor-positions/ฉันได้เพิ่มแอตทริบิวต์ออโต้โฟกัสในช่องป้อนข้อมูลและ voila!

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 ('ออโต้โฟกัส');
raison
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.