Как получить содержащую форму ввода? - PullRequest
94 голосов
/ 13 июня 2009

Мне нужно получить ссылку на родителя 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"));

Ответы [ 10 ]

167 голосов
/ 13 июня 2009

Родные элементы 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:

36 голосов
/ 13 июня 2009

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

function doSomething(element) {
  var form = element.form;
}
4 голосов
/ 23 июля 2012

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

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

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

3 голосов
/ 13 июня 2009

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

function doSomething(element) {
    var form = $(element).closest("form").get().
    //do something with the form.
}
2 голосов
/ 31 октября 2012
function doSomething(element) {
  var form = element.form;
}

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

2 голосов
/ 04 августа 2011

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

var my_form = $('input[name=first_name]').get(0).form;
2 голосов
/ 19 апреля 2010

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

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

0 голосов
/ 16 августа 2016

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

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 голосов
/ 25 мая 2015

просто как:

alert( $(this.form).attr('name') );
0 голосов
/ 04 августа 2014

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...