入力の包含形式を取得するにはどうすればよいですか?


106

INPUTへの参照しかない場合、INPUTのFORM親への参照を取得する必要があります。これは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が保証するより多くのブラウザーであるため、これに固執する必要があります。

これが別のタイプの要素(以外<input>)である場合は、次のようにして最も近い親を見つけることができますclosest

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

また、次のformプロパティのMDNリンクを参照してくださいHTMLInputElement


さて、これはうまくいきます。form属性について。私はそれを試してみましたが、それもうまくいきます。しかし、これはあなたが言っているブラウザ間でサポートされていませんか?
Ropstah 2009年

確かにそうだと思います。私は100%確信がないので、何も約束したくありません。私は今それを調べています...
パオロベルガンティーノ

5
element.formを使用してください-jQueryよりも多くのブラウザーで動作します。これは1つのプロパティ参照でもあるので、closest()でDOMツリーを上に移動するよりも約1000倍効率的です。
NickFitz 2009年

1
同意する。先ほど述べたように、フォームのプロパティがすべての一般的なブラウザに広範囲に実装されているかどうかは、最初はわかりませんでした。私はこれをより良いオプションとしてより明確にリストするように私の回答を編集しましたが、これが異なるタイプの要素である場合、最も近いものを一口として残します。
Paolo Bergantino、

これは、selectなどの他の入力タイプでも機能するようです。知ってよかった。
Falk

42

すべての入力には、formその入力が属しているフォームを指すプロパティがあるため、単純に次のようにします。

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

4

私は少しjQueryと古いスタイルのJavaScriptを使用しています-少ないコード

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

これは、要素を含むフォームへの完全な参照です


3
あなたは基本的に「これをjQueryオブジェクトにして、それをjQueryオブジェクトにしない」と言っています。
isherwood

1
ねえ、なぜやらないの$(this.form)
Andre Figueiredo


2

jQueryを使用していて、任意のフォーム要素へのハンドルがある場合、.formを使用する前に要素をget(0)する必要があります

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


2

element.attr('form')代わりに使用する必要がありましたelement.form

Fedora 12でFirefoxを使用しています。



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>

「this」は選択要素、.formはその親フォームになります。正しい?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.