Làm cách nào để lấy dạng chứa của một đầu vào?


106

Tôi cần tham chiếu đến MẪU mẹ của một INPUT khi tôi chỉ có tham chiếu đến INPUT đó. Điều này có khả thi với JavaScript không? Sử dụng jQuery nếu bạn thích.

function doSomething(element) {
    //element is input object
    //how to get reference to form?
}

Điều này không hoạt động:

var form = $(element).parents('form:first');

alert($(form).attr("name"));

Câu trả lời:


185

Các phần tử DOM gốc là đầu vào cũng có formthuộc tính trỏ đến dạng chúng thuộc về:

var form = element.form;
alert($(form).attr('name'));

Theo w3schools , thuộc .formtính của các trường đầu vào được hỗ trợ bởi IE 4.0+, Firefox 1.0+, Opera 9.0+, thậm chí còn nhiều trình duyệt hơn mà jQuery đảm bảo, vì vậy bạn nên tuân thủ điều này.

Nếu đây là một loại phần tử khác (không phải an <input>), bạn có thể tìm phần tử gốc gần nhất với closest:

var $form = $(element).closest('form');
alert($form.attr('name'));

Ngoài ra, hãy xem liên kết MDN này trên thuộc formtính của HTMLInputElement:


Được rồi, điều này hoạt động .. Giới thiệu về thuộc tính biểu mẫu. Tôi vừa thử nó và điều đó cũng hoạt động. Nhưng điều này không được hỗ trợ trên các trình duyệt mà bạn đang nói?
Ropstah

Tôi khá chắc chắn là như vậy. Tôi không chắc chắn 100% nên tôi không muốn hứa bất cứ điều gì. Tôi đang nhìn vào nó ngay bây giờ ...
Paolo Bergantino

5
Sử dụng element.form - nó sẽ hoạt động trên nhiều trình duyệt hơn jQuery. Nó cũng là một tham chiếu thuộc tính, vì vậy sẽ hiệu quả hơn khoảng một nghìn lần so với việc đi lên cây DOM với gần nhất ().
NickFitz

1
Tôi đồng ý. Như tôi đã nói, ban đầu tôi không chắc liệu thuộc tính biểu mẫu có được triển khai rộng rãi trong tất cả các trình duyệt phổ biến hay không. Tôi đã chỉnh sửa câu trả lời của mình để liệt kê rõ ràng hơn đây là lựa chọn tốt hơn trong khi tôi đang rời khỏi gần nhất dưới dạng một mẩu tin nếu đây là một loại phần tử khác.
Paolo Bergantino

Nó dường như cũng hoạt động với các loại đầu vào khác như select. Tốt để biết.
Falk

42

Mọi đầu vào đều có thuộc formtính trỏ đến biểu mẫu mà đầu vào thuộc về, vì vậy, đơn giản là:

function doSomething(element) {
  var form = element.form;
}

4

Tôi sử dụng một chút jQuery và javascript kiểu cũ - ít mã hơn

$($(this)[0].form) 

Đây là một tham chiếu đầy đủ đến biểu mẫu có chứa phần tử


3
Về cơ bản, bạn đang nói "biến nó thành một đối tượng jQuery và sau đó biến nó thành một đối tượng jQuery".
isherwood

1
geez, tại sao không chỉ làm $(this.form)?
Andre Figuentico

3

Sử dụng jQuery :

function doSomething(element) {
    var form = $(element).closest("form").get().
    //do something with the form.
}

2

Nếu sử dụng jQuery và có một xử lý đối với bất kỳ phần tử biểu mẫu nào, bạn cần lấy (0) phần tử trước khi sử dụng .form

var my_form = $('input[name=first_name]').get(0).form;

2
function doSomething(element) {
  var form = element.form;
}

và trong html, bạn cần tìm phần tử đó và thêm "biểu mẫu" thuộc tính để kết nối với biểu mẫu đó, vui lòng tham khảo http://www.w3schools.com/tags/att_input_form.asp nhưng biểu mẫu này không có hỗ trợ IE , tức là bạn cần phải chuyển trực tiếp id biểu mẫu.


2

Tôi cần phải sử dụng element.attr('form')thay vì element.form.

Tôi sử dụng Firefox trên Fedora 12.


0

đơn giản là:

alert( $(this.form).attr('name') );

0

Và một cái nữa....

var _e = $(e.target); // e being the event triggered
var element = _e.parent(); // the element the event was triggered on
console.log("_E " + element.context); // [object HTMLInputElement]
console.log("_E FORM " + element.context.form); // [object HTMLFormElement]
console.log("_E FORM " + element.context.form.id); // form id

0

Ví dụ về hàm Javascript này được gọi bởi trình xử lý sự kiện để xác định biểu mẫu

function submitUpdate(event) {
    trigger_field = document.getElementById(event.target.id);
    trigger_form = trigger_field.form;

-2

cái này sẽ hoạt động chứ? (để trống hành động gửi biểu mẫu trở lại chính nó, phải không?)

<form action="">
<select name="memberid" onchange="this.form.submit();">
<option value="1">member 1</option>
<option value="2">member 2</option>
</select>

"this" sẽ là phần tử chọn, .form sẽ là biểu mẫu mẹ của nó. Đúng?

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.