Як отримати містити форму вводу?


106

Мені потрібно отримати посилання на батьківську форму FORM 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"));

Відповіді:


185

Рідні елементи DOM, які є входами, також мають formатрибут, який вказує на форму, до якої вони належать:

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

Згідно з w3schools , .formвластивість полів введення підтримується IE 4.0+, Firefox 1.0+, Opera 9.0+, що є ще більшою кількістю браузерів, які гарантують jQuery, тому вам слід дотримуватися цього.

Якщо це був інший тип елемента (не an <input>), ви можете знайти найближчого з батьків closest:

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

Також дивіться це посилання MDN щодо formвластивості HTMLInputElement:


Добре це працює .. Про атрибут форми. Я просто спробував це, і це теж працює. Але це не підтримується у веб-переглядачах, про які ви говорите?
Ropstah

Я майже впевнений, що це так. Я просто не на 100% впевнений, тому нічого не хочу обіцяти. Я зараз розбираюсь у цьому ...
Паоло Бергантіно

5
Використовуйте element.form - він працюватиме у більшості браузерів, ніж у jQuery. Це також одна довідка про властивості, тому буде приблизно в тисячу разів ефективнішою, ніж піднімання дерева DOM з найближчим ().
NickFitz

1
Я згоден. Як я вже сказав, я просто не був впевнений, чи властивість форми широко впроваджена у всіх звичайних браузерах. Я відредагував свою відповідь, щоб більш чітко перерахувати це як кращий варіант, тоді як я залишаю найближчий як кухонний, якщо це був інший тип елемента.
Паоло Бергантіно

Схоже, це працює і з іншими типами введення, такими як select. Добре знати.
Фолк

42

Кожен вхід має formвластивість, яка вказує на форму, до якої належить вхід, тож просто:

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

4

Я використовую трохи jQuery та старого стилю javascript - менше коду

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

Це повна посилання на форму, що містить елемент


3
Ви в основному говорите "зробіть це об'єктом jQuery, а потім зробіть його не об'єктом jQuery".
Ізервуд

1
боже, чому б просто не робити $(this.form)?
Андре Фігейредо

3

Використання jQuery :

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

2

Якщо ви використовуєте jQuery і маєте ручку до будь-якого елемента форми, вам потрібно отримати (0) елемент перед використанням .form

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

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

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


2

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

Я використовую Firefox на Fedora 12.



0

І ще один….

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

Цей приклад функції Javascript викликається слухачем події для ідентифікації форми

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

-2

це працювало б? (залишаючи пусту дію, також надсилає форму назад, правда?)

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

"це" буде елементом вибору, .form буде його батьківською формою. Правильно?

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.