2009-06-13 27 views
77

Tôi cần tham khảo phụ huynh FORM của INPUT khi tôi chỉ có tham chiếu đến INPUT đó. Điều này có thể với JavaScript? Sử dụng jQuery nếu bạn muốn.Làm thế nào để có được hình thức cha mẹ của một đầu vào?

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

này không hoạt động:

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

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

$ (phần tử) .parents ('hình thức: thứ nhất'); hoạt động cho tôi bằng cách sử dụng jQuery 1.4.2 (vâng cũ) – Kreker

Trả lời

136

phần tử DOM Native đó là đầu vào cũng có một thuộc tính form trỏ đến hình thức mà họ thuộc về:

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

Theo w3schools , thuộc tính .form của các trường nhập đượ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 dính vào điều này.

Nếu đây là một loại khác nhau của nguyên tố (không phải là một <input>), bạn có thể tìm ra cha mẹ gần gũi nhất với closest:

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

Ngoài ra, xem liên kết này MDN trên form tài sản của HTMLInputElement:

+0

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

+0

Tôi khá chắc chắn là vậy. Tôi chỉ không chắc chắn 100% vì vậy tôi không muốn hứa hẹn gì cả. Tôi đang xem xét nó ngay bây giờ ... –

+4

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ả gấp hàng nghìn lần so với việc đi lên cây DOM với gần nhất(). – NickFitz

3

Sử dụng jQuery:

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

Mỗi đầu vào có một tài sản form mà chỉ vào hình thức đầu vào thuộc, vì vậy chỉ đơn giản là:

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

điều này không hoạt động bằng cách nào đó ..? – Ropstah

+0

@ Ropstah-- điều này là muộn, nhưng 'phần tử' chỉ là một nút DOM không phải là một đối tượng jquery. sử dụng jquery sẽ là $ (phần tử) .attr ('form'), như Paolo ghi chú trong câu trả lời được chấp nhận. – ps2goat

2

tôi cần phải sử dụng element.attr ('form') thay vì yếu tố .form

tôi sử dụng firefox trên Fedora 12

2

Nếu sử dụng jQuery và có một xử lý cho bất kỳ yếu tố hình thức, bạn cần phải nhận được (0) nguyên tố này trước khi sử dụng .form

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

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

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

Đây là một tài liệu tham khảo hoàn chỉnh mẫu có chứa các yếu tố

+1

'$ (this.form)'. – Endless

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" được phân bổ để 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 attr không hỗ trợ IE, ví dụ: bạn cần chuyển trực tiếp id biểu mẫu.

-2

có hoạt động không? (để trống hành động cũng gửi lại biểu mẫu cho 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 gốc. Đúng?

0

đơn giản là:

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

Và thêm một ....

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 
Các vấn đề liên quan