Cách đặt tiêu điểm cho trường nhập liệu bằng JQuery


106

Cho cấu trúc HTML sau:

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

sẽ được lặp lại nhiều lần trên trang, làm cách nào để đặt tiêu điểm vào trường nhập trong .bottomdiv khi người dùng nhấp vào liên kết trong .topdiv?

Tôi hiện đang làm cho .bottomdiv xuất hiện thành công khi nhấp bằng mã JQuery bên dưới, nhưng dường như không thể tìm ra cách đặt tiêu điểm vào trường đầu vào cùng một lúc.

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

Cảm ơn!


Câu hỏi của bạn đã được trả lời, nhưng cũng có thể: Tôi cho rằng bạn cũng đang thực hiện return false;lệnh gọi lại ở cuối sự kiện? Hay function(e) { e.preventDefault(); ..... }? Nếu không, trình duyệt của bạn sẽ chỉ điều hướng đến trang đó sau khi thực hiện lệnh gọi lại.
simshaun,

@simshaun điều hướng đến trang nào?
lăn đá vào

Trong ví dụ của bạn, khi bạn nhấp vào liên kết đó, nó sẽ chuyển đến example.com .
simshaun,

Ồ, đúng rồi, cảm ơn vì đã quan tâm!
lăn đá vào

Câu trả lời:


135

Hãy thử điều này, để đặt tiêu điểm cho trường nhập đầu tiên:

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

1
Khoảng cách giữa input& :first. JQuery có tự động ghép nối không? Tôi luôn nghĩ nó phải như vậy input:first.
simshaun,

Có, bạn có thể viết nó theo một trong hai cách. Tôi cho rằng input:firstcó thể là cách chính thức hơn để viết nó, mặc dù nó có vẻ dễ đọc hơn theo cách khác. Nhưng có lẽ đó chỉ là tôi :)
Justin Ethier

Tôi đoán rằng vì tôi đã quá quen với nó, khi tôi nhìn thấy khoảng trống, tôi tự động nghĩ là "phần tử con" và phải mất một giây để tự gỡ rối. Nhưng này, đó chỉ là tôi. Thật tuyệt khi nó hoạt động theo cả hai cách.
simshaun,

@justin, tôi thực sự đã phải chỉnh sửa nó một chút để làm cho nó hoạt động: $(this).parent().siblings('div.bottom').find("input.post").focus();nhưng đó .find()là bộ chọn mà tôi đang tìm kiếm. Thật thú vị input :firstvà cũng không input:firsthoạt động.
lăn đá vào

Thú vị, có lẽ vì đầu vào nằm trong một formthẻ. Dù sao, rất vui vì bạn đi làm việc!
Justin Ethier


7

Câu trả lời của Justin không phù hợp với tôi (Chromium 18, Firefox 43.0.1). jQuery's .focus()tạo điểm nhấn trực quan, nhưng con trỏ văn bản không xuất hiện trong trường (jquery 3.1.0).

Lấy cảm hứng từ https://www.sitepoint.com/jqueryhtml5-input-focus-cursor-positions/ , tôi đã thêm thuộc tính tự động lấy nét vào trường nhập liệu và thì đấy!

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
Đã làm cho tôi. Phiên bản đơn giản hơn như sau: $ ('. Class input'). Focus (); $ ('. đầu vào lớp'). prop ('tự động lấy nét');
raison
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.