• 締切済み

formの名前はname? id?

formの名前はnameかidのどちらでしょうか?

  • HTML
  • 回答数7
  • ありがとう数2

みんなの回答

回答No.7

「後方互換性~」の件を考慮するなら、将来廃止になる可能性を考えてid属性を使用します。 しかしHTML5ではformのname属性が非推奨でなくなる可能性があるように思えるのです。 その理由と、name属性が非推奨でない場合にどう使い分けるかを述べます。 あくまで臆測なので、実際に今から開発するならid属性を使用します。 ■formのname属性が非推奨でなくなる可能性 ANo2にあるように、HTML4の仕様書には「この属性は後方互換性~」の注意書きがあります。 しかし、現在草案段階のHTML5の仕様書にはそれが見つかりません。 また、HTML4であってもformのname属性は「非推奨」ではありません。あくまでANo2さんが紹介している「注意書き」だけです。 XHTMLでは非推奨だったり廃止だったりしますが、XHTMLとHTMLは別物と思った方がいいでしょう。実際、W3CはXHTML2の策定を打ち切りHTML5の標準化に注力しています。 そこで、注意書きが無くなったから注意する必要がなくなった(非推奨ではなくなった)、という推測が立つわけです。 「HTML5 における HTML4 からの変更点」の「3.4. 変更された属性」項には「以前は非推奨だったが非推奨でなくなった」属性が記述されています。もともと非推奨でないname属性はこの中にはありませんが、このような変更があるということが先の推測を後押しします。 http://standards.mitsue.co.jp/resources/w3c/TR/html5-diff/ ■id属性とname属性の使い分け ANo6にあるように、HTML5からid属性とname属性には明確な違いが出来ました。それを基に考えます。 【命名】 「formのname属性はform内で一意になればよい」この範囲の狭さは命名をする上でid属性より有利に働きます。 「id属性は全要素内で一意にならなければならない」これはすべての要素を考慮した名前を付ける必要があるということです。 例えば、ユーザー登録画面にformと登録ボタンがあるとします。 登録ボタンのidをentryとすれば、formのidをentryには出来なくなります。なのでentryButton, entryFormのように命名したりします。 名前というのは長くなるほど決めずらいものです。entryFormにしても、他にentryFrmやfrmEntryというパターンが考えられます。どのような命名規則にするかのルール決めが必要で、これがなかなか面倒なのです。 それがname属性であれば、どちらもentryと名付けられるのです。シンプルです。cssからの指定はform[name="entry"]のようにします。 【指定】 先の命名から続いて登録画面を考えます。「ボタンを一意に指定して色付けしたい」となったときそれぞれcssでは以下のように指定します。 #entryButton {color: red} form[name="entry"] button[name="entry"] {color: red} idの利点は短いことです。説明の必要はないでしょう。 nameの利点は要素を明確にせざるを得ないことです。 例えば以下のおかしなcss #entryButton td {color: red} form[name="entry"] button[name="entry"] td {color: red} これをバグだと判断できるのはname属性の方だけです。(button要素の下にtd要素は置けない) id属性の方はそれがtr要素に付いている可能性もあり、htmlを見ないことには判断ができません。 name属性の方がバグ探索に掛る手間が少ないのです。 id属性の方でもbutton#entryButtonとすれば同じですが、name属性の方はそれを強制できるという点が利点とも欠点とも言えます。 また、これはバグについていえば利点ですが、変更し易さでいえば欠点になります。(<button>ではなく<inputtype="button">に変更した場合とか) 【手段と目的】 formを一意にするためにはid属性を使用します。name属性ではありません。 このことはHTML5で登場する「form属性」が示唆を与えてくれます。 これはform要素外にinput要素などを配置可能にしてくれる属性です。 以下のようにすることで、input要素をform外に置くことが出来るのです。 <form id="entryForm"></form> <input type="text" name="userName" form="entryForm" /> http://www.marguerite.jp/Nihongo/WWW/RefHTML5/Attrs/form.html このform属性にはform要素のidを指定しなければなりません。nameは指定できないのです。 このことから、form要素を一意にする為にはid属性を使うべきだと思われます。 ではform要素のname属性は何に使うかですが、あえて使い分けるなら「id属性に出来ることをしないことを示す」為に利用します。 id属性ではなくname属性を使う事で、form外にinput要素が無い事を示せます。これはソースコードを読む上で役に立つ情報だと思います。 もう少し突き進めるなら、コードには表れない含意になりますが、「form要素の子要素を一意にする」為だけに利用します。 こうすることで、id属性と意味が重なっていた「form要素を一意にする」という部分が大幅に薄れます。 実際のコード上では以下のように利用することはあっても、 form[name="entry"] button[name="entry"]{ color: red} 以下のようには利用しない、 form[name="entry"] {color: red} ということを含意させるのです。 そうすれば例えば、submitボタンを押して画面が真っ白になるバグに遭遇したときに、「form要素のaction属性にjavascriptから変更が及ぶことはない」とか考えて、バグの探索を短縮できるかもしれません。 【結論】 「form属性」のようなid指定が必要な属性が将来的に増えてくることを考えると、form要素を一意にする為にはid属性を使った方が無難だと思います。 ■蛇足 - inputのname属性について HTML5から新属性としてlabel要素にfor属性が加わりました。 このfor属性にidを指定することで、label要素外に対象となる要素を配置可能にします。 以下のような形です。 <label for="chk">ラベル</label> <input type="checkbox" id="chk" /> これでも通常のラベルと同じように動作するのです。(画面に表示された「ラベル」という文字をクリックすることでチェックボックスのOnOffを切り替えられる) これはデザインをする上で便利だったりするのですが、form属性と同じようにname属性は指定できません。id属性しかだめなのです。 それは当然のことです。inputのname属性はformが違えば名前を重複できるのですから、一意に指定する際には利用できないのです。 このことに対して私は憤りを感じました。 inputのname属性は便利です。 例えば、ユーザー登録画面とログイン画面が一体化したような画面では、登録用とログイン用の2つのformが必要になります。 それぞれの中には同じようにuserNameとpasswordがあるわけですが、これがinputにid属性しか使えないとなるとuserNameは2つあるのでuserName, userName2なんていう命名をしなくてはならない羽目になります。これは中々に面倒です。 どちらもuserNameと命名したいのが人情です。それをname属性は満たしてくれます。 cssで以下のようにして一括でデザインが与えられるのです。 input[name="userName"]{ color: red } つまりformが違えば同じnameを使えるというのは私にとっては大きな利点なのです。 その上で一意指定もしたい。一意指定が必要な機会は中々に多くある。と考えると、inputのname属性を活かす為に、form要素に名前を付けることは必然のことだ、と思われました。 そのためにこそ、id属性という汎用属性ではなく、name属性という固有の属性が生き残ったのではないかと思ったのです。 もしform属性とfor属性が以下のように指定できれば、私の期待は達成されたでしょう。しかし現実は違いました。 <form name="frm"></form> <label form="frm" for="chk">ラベル</label> <input type="checkbox" form="frm" name="chk" /> 現状、for属性がこんなことでありながら、input要素のname属性は残り続けています。 fieldset要素なんてのも出てきました。将来的にはチェックボックスのグループ化の為に同じnameを付ける必要がなくなるかもしれません。 HTMLでもname属性はid属性に乗っ取られる予定なのかもしれません。

  • think49
  • ベストアンサー率59% (285/482)
回答No.6

#5 です。某所で指摘を受けまして一部訂正します。 HTML Standard (HTML5) で規定されるform要素におけるname属性はform要素群の中で一意でなければなりません。(#3 の方が指摘された通りです) そして、document.forms['foo'] が NodeList となり、document.forms['foo'][0] で参照する挙動は Google Chrome 18, Opera 11.61 のバグでした。 DOM4 では初めに検出したform要素を返す仕様であり、Firefox11, IE8 はこの仕様に準拠しています。 http://dvcs.w3.org/hg/domcore/raw-file/tip/Overview.html#interface-htmlcollection http://togetter.com/li/291230 id属性値は全ての要素の中で一意でなければなりませんが、form要素のname属性値はform要素の中で一意であればよい、という違いがあります。 <form name="hoge"> と <img name="hoge"> のように要素毎に同じ名前を付与する使い方が考えられますが、後方互換性のための属性ですし、特別な事情がなければあえてname属性を採用する理由はないと思います。

  • think49
  • ベストアンサー率59% (285/482)
回答No.5

まず、「formの名前」を定義してください。 その質問に至るまでの前提となるものがあると思いますが、それによって回答内容が変わってきます。 JavaScript で意識することがあるとすれば、document.forms[name] で辿れる名前が思いつきますが、document.forms ではID属性でもname属性でも同じように辿れます。 (※このことは HTML Standard (HTML5) で規定されており、http://www.whatwg.org/specs/web-apps/current-work/multipage/forms.html#attr-form-name の form[name] で説明されています。) <form id="hoge" name="piyo"></form> <script type="text/javascript"> console.log(document.forms['hoge']); console.log(document.forms['piyo']); </script> http://jsfiddle.net/eGHD2/ ただし、name属性値はユニーク(唯一の名前)ではありません。 <form id="hoge1" name="foo"></form> <form id="hoge2" name="foo"></form> <script type="text/javascript"> console.log(document.forms['hoge1']); console.log(document.forms['foo'][0]); // name="foo" は2つ存在するので index 値を指定しなければならない </script> http://jsfiddle.net/eGHD2/1/ 用語定義としてはid属性はグローバル属性(全ての要素に定義できる属性)ですので、「要素の名前」ともいえます。 http://www.whatwg.org/specs/web-apps/current-work/multipage/elements.html#the-id-attribute form要素におけるname属性はform要素特有の名前ですので「form要素の名前」という解釈も出来ると思います。 いずれにしても質問に至るまでの経緯を知らない現状では、form要素の名前がid属性ともname属性とも断定できません。

  • b0a0a
  • ベストアンサー率49% (156/313)
回答No.4

id

回答No.3
  • ORUKA1951
  • ベストアンサー率45% (5062/11036)
回答No.2

idとnameは、似ているようですが、意味が違います。 idは、HTML内の特定の要素を一意に指定するものです。一方nameの値は重複しても構いません。 formに名前をつける場合に、nameを使うのは後方互換のためです。 「この属性は後方互換性のために含められた。要素を識別する目的には、アプリケーションは id属性を用いる必要がある。 ( http://www.asahi-net.or.jp/%7Esd5a-ucd/rec-html401j/interact/forms.html#adef-name-FORM )」  この場合(form要素で使われる場合は、一意でなければなりません。)  これはHTML5であっても同様です。 【引用】____________ここから The name attribute represents the form's name within the forms collection. The value must not be the empty string, and the value must be unique amongst the form elements in the forms collection that it is in, if any.  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ここまで[4.10.3 The form element — HTML5( http://www.w3.org/TR/html5/the-form-element.html#attr-form-name )]より  「name属性は、フォームコレクション内のフォームの名前を表します。値は空の文字列にすることはできません、任意の場合、この値は、複数のフォームコレクションが存在する場合、すべてのフォーム要素間で一意である必要がある。」  そして、formのname属性は、コントロールのnameと異なりサーバーには送られませんから、nameを使う必要はないでしょう。

noname#182841
noname#182841
回答No.1

nameです。

関連するQ&A

  • form につけた id 値の取得方法

    form 内に id という名前の input 要素があると、form につけた id 値が取得できません。firefox で確認しましたが、例の f2.id が input 要素になります。このような場合 form の id 値はどのようにすれば取得できるでしょうか。 <!doctype html> <html> <head><title>id test</title></head> <body> <form id="f1" name="f1"> <input type="hidden" name="idx"> </form> <form id="f2" name="f2"> <input type="hidden" name="id"> </form> <script type="text/javascript"> var f1 = document.getElementById('f1'); var f2 = document.getElementById('f2'); alert("f1.name: " + f1.name + ", f1.id: " + f1.id + "\nf2.name: " + f2.name + ", f2.id: " + f2.id); </script> </body> </html>

  • FORMのIDを指定するとPOSTされない

    フォームの入力チェックをjavascriptで処理するため、FORMにIDをつけたのですが、ボタン押下でチェックが通れば自分自身にPOSTするような形をとっております。しかし、FORMにIDをつけてPOSTをしようとしても、何のアクションも起こりません。IDをはずせばきちんとPOSTされます。原因がわからないので、質問させていただきました。お分かりになる方、ご教授くださいますよう、お願いいたします。 <form id="corpform" method = "POST" action ="自分自身" > <input type="text" name="test" value="test" /> <input type="submit" name="add" value="追加" /> </form>

  • 異なるformで同一のnameは使用できる??

    1つのHTML内で使用する form~/form が2回あるとします。(formA, formBがあるとします) この場合に、formAで使用した name の名前をもう片方のformBで使用しても問題はありませんか? name="aa"のテキストboxと、value="表示"のSUBMITボタンを持つ form が2個あり、かつ どちらのボタンを押しても同じCGIを呼び出す場合、 B側のボタンを押すときにCGI側で受け取る aaの値は、 B側のテキストboxに入力した値になるのでしょうか?? 質問内容がわかりにくいかとは、思いますが、よろしくお願いします。

    • ベストアンサー
    • CGI
  • $FORMの名前と変数の結合

    フォームメールのCGIをPerlで作成しようとしていますが、 変数の使い方がうまくいきません。 ご指南お願いします。 フォームからのデータを受け取って変換したあとの項目に $FORM{'name_1'} ~ $FORM{'name_60'} $FORM{'naiyou_1'} ~ $FORM{'naiyou_60'} とあります。 たとえば name_1 に"名前" name_2 に"住所" naiyou_1に"田中" naiyou_2に"東京都" が入っているとして 内容確認のページに 【$FORM{'name_1'}= $FORM{'naiyou_1'}】 【$FORM{'name_2'}= $FORM{'naiyou_2'}】 = 【名前 = 田中】 【住所 = 東京都】 と表示したく、 $k_name = "name_" $k_value = "naiyou_"; for ($i = 1 ; $i <= 60 ; $i++){ $mailbody .= "$FORM{'$k_name.$i'} = $FORM{'$k_value.$i'}\n"; } として $mailbodyに追加していき、 最後に纏めて print "$mailbody\n"; としようと思っていますが、 この状態で実行テストすると$mailbodyが何も入ってなく 空の状態のまま表示されます。 $i = 1 の時 $FORM{'$k_name.$i'}は $FORM{'name_1'}と見ていないのでしょうか? また、 $FORM{'$k_name.$i'}を $FORM{'name_1'}と見るようにするには どうしたら良いのでしょうか。 どなたか知恵をお貸し頂けませんでしょうか。 わかりにくい点がありましたら、補足致しますのでご指摘ください。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • formの名前をperlに書き込まずに簡単に取るには?(eval使用で簡単にできますか?)

    やりたいことは以下のとおりです。 FORMから入力された情報をDBに書き込む。 ただし、FORMのidをいちいちコーディングしているとメンテナビリティが落ちるので避けたい。 つまり、これは避けたい。 ・・・ $sth = $db->prepare("INSERT INTO db_name ($db_field) VALUES $FORM{name},$FORM{phone}・・・・・"); ・・・ ちなみにDBのフィールド名称は別に定義しており、それをテーブルごとに$db_fieldに代入してinsert文を使いまわしている。 また、FORMの名称は各々意味を持たせたいので番号にはしたくない。 このとき、FORMの名前をHTMLから取ってきてvalueに入れる簡単な方法はないでしょうか。 現在、dbのフィールド名とFORMの名称はほぼ一致するため、field名からFORM名称を作ってしまうやり方を以下のように考えていますが、evalの使い方がまずいのかうまくいきません。 #field名からFORM名を作成する my $value_name; my $form_name; my @field_name = split(/,/,$db_field); foreach $form_name (@field_name) {  #"'$FORM{name}','$FORM{phone}'・・・"の形を次々につなげる  $value_name = $value_name . "'\$FORM{" . $form_name . "}',";  } #最後にdbのフィールド名とFORMで一致しない項目を付け足す $value_name = $value_name . "'\$date','\$time'";    #ここからが問題  #$value_nameにはFORM{name},FORM{phone}・・・と入っているので  #それを使って、$db_value = "FORM{name},FORM{phone}・・・ #という関数と同じことを実行させたい  #しかし下のevalでは出ない。 my $db_value; my $db_value_temp; eval "\$db_value = $value_name";  この結果、$db_valueに各FORMの入力内容(佐々木、03*******など)が入り、それをDBにinsertしたいと考えてます。 上のロジックがうまくいけば、汎用的に使えるので非常に助かるのですが、いかがでしょうか。 そもそもevalなど使わない、もっと簡単な方法があればお願いします。 ずらずらと記述する、field名は別のincludeファイル内にダラダラと書いているので、同じようにform名もダラダラ書くというのは避けたいです。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • javaで name=id[?] を指定する方法とは?

    ショップ運営で、商品一覧から+-ボタンでそれぞれ数の増減をさせるよう、ほかのサイトを参考にして下記のようにjavascriptで記述してみました。 このうち、商品2と3はボタンが機能したのですが、商品1は数の増減ができません。 おそらく要素名に(name=id[1])と[]で囲っているからだと思うのですが、この[]を取らないまま、ボタンを機能させる方法はありますでしょうか? よろしくお願いします。 <FORM> 商品1:<INPUT type=text name=id[1] value=3 size=4> <INPUT type=button value="+" onClick="plus(this.form.id[1])"> <INPUT type=button value="-" onClick="minus(this.form.id[1])"> <BR> 商品2:<INPUT type=text name=id2 value=3 size=4> <INPUT type=button value="+" onClick="plus(this.form.id2)"> <INPUT type=button value="-" onClick="minus(this.form.id2)"> <BR> 商品3:<INPUT type=text name=id3 value=3 size=4> <INPUT type=button value="+" onClick="plus(this.form.id3)"> <INPUT type=button value="-" onClick="minus(this.form.id3)"> </FORM> <SCRIPT language="JavaScript"> <!-- function plus(chk){chk.value++; if (chk.value==6) {chk.value=5} } function minus(chk){chk.value--; if (chk.value==0) {chk.value=1} } // --> </SCRIPT>

  • Form nameが違うものからのデータ取得

    プログラミング初心者です。 教えてください。 因みにaspの環境です。 一つの画面でFormが2つあります。 <FORM name = "Form1" action = "./b.asp" /FORM> <FORM name = "Form2" action = "./c.asp" /FORM> b.aspとc.asp側の記述ですが、 form 1の中でinputしたデータの方はb.asp form 2の中でinputしたデータの方はc.asp というようにそれぞれ別々で識別してデータを受け取れるのでしょうか? もしくはRequest.Form( )の書き方とか異なったりしますでしょうか? 宜しくお願いします。

    • ベストアンサー
    • HTML
  • document.form1.~について

    クリックしたセルのidとnameを取得するものですが document.form1.send.value = disp_area_all ;のform1を 変数に置き換えることは出来るでしょうか? tableもFORMも沢山あってクリックした場所によって別のFORMで idとnameを取得したいのですが。 <html> <head> <title></title> <script language="JavaScript"> <!-- var disp_area = new Array(); var disp_event; var disp_id; var disp_name; function check_event() { disp_id = null; disp_name = null; if ( event.srcElement ) { disp_id = event.srcElement.id; disp_name = event.srcElement.name; } switch ( disp_event ) { default: disp_area_all = ''; disp_area[0] = 'Id:' + disp_id + ' Na:' + disp_name disp_area_all = disp_area_all + disp_area[0] ; document.all.send.value = disp_area_all ; document.form1.send.value = disp_area_all ; break; } } //--> </script> </head> <body> <table border=1><tr> <td onClick="check_event()" STYLE="width:30; height:30; background:#0000ff" id='10' name='1'></td> </tr></table> <FORM method="POST" name='form1' action=""> <input type="text" size=10 name="send"><br> <input type="submit" value="送信"> </FORM> </body> </html>

  • form nameをform actionにしたいんですが・・・

    <html> <head> <title> 商品確認 </title> <script language ="JavaScript"> <!-- function calc(amount){ document.ball.total.value = 4095 * eval(amount); }//--> </script> </head> <body> <form name=ball method="post"> //←ここをform action="x.php"にしたい。 V4SLBL ソフトタッチ鈴入り4号球<br> <hr> 個数: <select name ="num" onchange = "javascript:calc(this.value)"> <option value =0>0 <option value =1>1 <option value =2>2 <option value =3>3 <option value =4>4 <option value =5>5 </select> 小計: <input type="text" size="8" name="total">円<br> <hr> </form> </body> </html> 上の場所をaction="x.php"にしてx.phpに小計を送ろうとしています。 しかし、actionにすると小計が表示されなくなります。 いろいろ考えましたが全く答えが出てきません。 アドバイスよろしくお願いします。

  • 5個のFormタグを1つのFormタグでまとめたい

    <form method="POST" action="jan_Edit.asp" id=form2 name=form2> <input type="hidden" name="a" Value =<% = YY1 %> > ~</form> <form method="POST" action="jan_Edit.asp"> <input type="submit" value="This Month"> </form> <form method="POST" action="jan_Edit.asp" id=form2 name=form2> <input type="hidden" name="a" Value =<% = YY2 %> >~</form> 現在、カレンダーを作成しています。上記(3つしか乗せてませんが同じ内容) 変数は YY1=1年前の月初 MM1=1か月前の月初 MM2=1ヶ月後の月初 YY2=1年後の月初で インプットタイプでサブミットを使用しています。端的にいうと、現在Formを5個使って月次、年次でカレンダーを作ってます しかし、Formがこれだけ並んでたら、かっこ悪いので1つのForm文でまとめれたらと 思ってますがなかなかグーグル先生でもみつかりません。 Formを一つにまとめれたらと思いますが、どなたか知恵をおかしください。

    • ベストアンサー
    • HTML

専門家に質問してみよう