Как получить форму родителя ввода?

Мне нужно получить ссылку на родительский элемент FORM INPUT, когда у меня есть только ссылка на этот INPUT. Возможно ли это с помощью JavaScript? Используйте jQuery, если хотите.

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

Это не работает:

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

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

Ответ 1

Внутренние элементы DOM, которые являются входами, также имеют атрибут form, который указывает на форму, к которой они принадлежат:

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

Согласно w3schools, свойство .form полей ввода поддерживается IE 4.0+, Firefox 1.0+, Opera 9.0+, что еще больше браузеров, которые гарантирует jQuery, поэтому вы должны придерживаться этого.

Если бы это был другой тип элемента (а не <input>), вы могли бы найти ближайшего родителя с closest:

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

Также см. ссылку MDN в свойстве form HTMLInputElement:

Ответ 2

Каждый вход имеет свойство form, которое указывает на форму, к которой принадлежит вход, и просто:

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

Ответ 3

Я использую немного jQuery и javascript старого стиля - меньше кода

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

Это полная ссылка на форму, содержащую элемент

Ответ 4

Использование jQuery:

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

Ответ 5

Мне нужно было использовать element.attr('form') вместо element.form

Я использую firefox на Fedora 12

Ответ 6

Если вы используете jQuery и имеете дескриптор для любого элемента формы, вам нужно получить (0) элемент перед использованием .form

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

Ответ 7

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

и в html вам нужно найти этот элемент и добавить атрибут "form" для подключения к этой форме, пожалуйста, обратитесь к http://www.w3schools.com/tags/att_input_form.asp но эта форма attr не поддерживает IE, т.е. вам нужно передать форму id напрямую.

Ответ 8

просто как:

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

Ответ 9

И еще один....

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

Ответ 10

будет ли это работать? (оставляя действие пустое, возвращает форму обратно к себе тоже, верно?)

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

"this" будет элементом выбора .form будет его родительской формой. Правильно?