jQuery tìm mẫu cha


219

tôi có html này

<ul>
    <li><form action="#" name="formName"></li>
    <li><input type="text" name="someName" /></li>
    <li><input type="text" name="someOtherName" /></li>
    <li><input type="submit" name="submitButton" value="send"></li>
    <li></form></li>
</ul>

Làm thế nào tôi có thể chọn hình thức input[name="submitButton"]là một phần của? (khi tôi nhấp vào nút gửi, tôi muốn chọn biểu mẫu và nối thêm một số trường trong đó)

Câu trả lời:


485

Tôi sẽ đề nghị sử dụng closest, trong đó chọn phần tử cha phù hợp gần nhất:

$('input[name="submitButton"]').closest("form");

Thay vì lọc theo tên, tôi sẽ làm điều này:

$('input[type=submit]').closest("form");

2
Có thể chúng ta nên thêm nhận được bởi chỉ số? '$ ("input [type = submit]"). gần nhất ("biểu mẫu");' trả về một mảng các biểu mẫu.
sergzach

Tôi đang cố gắng sử dụng cách trên theo cách này: $ (". Mỗi img"). Click (function () {$ (this) .closest ("form"). Show ();}); Nhưng tôi dường như không thể làm cho nó hoạt động. : /
Alisso

2
câu trả lời peterjwest là tốt hơn so với câu trả lời này.
gagarine

Trong HTML5, có một thuộc tính 'biểu mẫu' mới cho phép bạn có phần tử bên ngoài biểu mẫu mẹ. Điều này cần được kiểm tra trước.
mcintyre321

56

Bạn có thể sử dụng tham chiếu biểu mẫu tồn tại trên tất cả các đầu vào, tốc độ này nhanh hơn nhiều .closest()( nhanh hơn 5-10 lần trong Chrome và IE8). Hoạt động trên IE6 & 7 cũng vậy.

var input = $('input[type=submit]');
var form = input.length > 0 ? $(input[0].form) : $();

2
Bạn đề cập đến IE8. Điều này có hoạt động cho các phiên bản 6, 7 và 9 không?
Sonny

1
Điều này tốt hơn nhiều và nhanh hơn như @peterjwest đã đề cập. Re IE6 Tôi nghĩ .form trên các yếu tố đầu vào là trên IE4, thật không may, trang dev của Netscape đã biến mất ngay bây giờ ... và ai sẽ kiểm tra mozilla.
Maciej opaciński

Đây là một cách an toàn hơn nhiều so với việc sử dụng closest()vì đầu vào có thể có một dạng gán riêng: codepen.io/anon/pen/vNqEyg
Möhre

Bạn có thể đã sử dụng tốc ký nếu ký hiệu để giữ mã của bạn ngắn, nhưng trong ví dụ này, nó chỉ làm mất tập trung vào mã thực tế bạn muốn hiển thị (đặc biệt đối với những người không quen với tốc ký). Tôi sẽ ủng hộ việc sử dụng thường xuyên nếu ().
AeonOfTime

Tôi muốn nói có quá nhiều lộn xộn với giải pháp đó. Nếu bạn đi với điều này (giải pháp của tôi dưới đây - vâng đây là quảng cáo :)): stackoverflow.com/a/18921404/261332 , thì bạn không cần loại phức tạp đó, vì nó sẽ chỉ hoạt động khi được yêu cầu và không làm gì khác
dùng

17

Đối với tôi, điều này có vẻ như đơn giản nhất / nhanh nhất:

$('form input[type=submit]').click(function() { // attach the listener to your button
   var yourWantedObjectIsHere = $(this.form);   // use the native JS object with `this`
});

2
Đối với tôi, sử dụng $(this.form)là giải pháp tốt nhất
jap1968

2

Đối với trình duyệt HTML5, người ta có thể sử dụng inputElement.form - giá trị của thuộc tính phải là id của một thành <form>phần trong cùng một tài liệu. Thông tin thêm về MDN .


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.