HTMLタグを使用する場合、属性と属性<input>
の使用の違いは何ですか。特に、同じ名前が付けられていることがあります。name
id
13 に答える
HTML4.01 では:
名前属性
- 、、、、、、、、
<a>
でのみ有効<form>
_<iframe>
_<img>
_<map>
_<input>
<select>
<textarea>
- 名前は一意である必要はなく、ラジオ ボタンやチェックボックスなどの要素をグループ化するために使用できます
- URLで参照できませんが、JavaScriptとPHPはURLを見ることができるので回避策があります
- JavaScript で参照されます
getElementsByName()
id
属性と同じ名前空間を共有します- 文字で始まる必要があります
- 仕様によると、大文字と小文字が区別されますが、最新のブラウザのほとんどはこれに従っていないようです
- 情報を送信するためにフォーム要素で使用されます。属性を持つ入力タグのみ
name
がサーバーに送信されます
ID属性
<base>
、<html>
、<head>
、<meta>
、<param>
、<script>
を除くすべての要素<style>
で有効<title>
- 各 ID は、ブラウザでレンダリングされるページ内で一意である必要があります。すべてが同じファイル内にある場合とそうでない場合があります。
- URL のアンカー参照として使用できます
#
符号付きの CSS または URL で参照されている- JavaScript では
getElementById()
で、jQuery では で参照されます$(#<id>)
- name 属性と同じ名前空間を共有します
- 少なくとも 1 文字が含まれている必要があります
- 文字で始まる必要があります
_
文字、数字、アンダースコア ( )、ダッシュ (-
)、コロン (:
)、ピリオド (.
)以外は使用できません- 大文字と小文字を区別しない
(X)HTML5 では、以下を除いてすべて同じです。
名前属性
<form>
これ以上有効ではありません- XHTML はすべて小文字でなければならないと言っていますが、ほとんどのブラウザはそれに従っていません
ID属性
- どの要素でも有効
- XHTML はすべて小文字でなければならないと言っていますが、ほとんどのブラウザはそれに従っていません
この質問は、HTML4.01 が標準であり、多くのブラウザーと機能が今日とは異なっていたときに書かれました。
name 属性は、Web サーバーなどへの投稿に使用されます。idは主に CSS (および JavaScript) に使用されます。次の設定があるとします。
<input id="message_id" name="message_name" type="text" />
フォームを投稿するときに PHP で値を取得するには、次のようにname属性を使用します。
$_POST["message_name"];
id は、前に述べたように、特定の CSS コンテンツを使用する場合のスタイリングに使用されます。
#message_id
{
background-color: #cccccc;
}
もちろん、id属性とname属性に同じ単位を使用できます。この 2 つは互いに干渉しません。
また、ラジオボタンを使用している場合など、より多くの項目に名前を使用できます。名前はラジオ ボタンのグループ化に使用されるため、これらのオプションの 1 つだけを選択できます。
<input id="button_1" type="radio" name="option" />
<input id="button_2" type="radio" name="option" />
この非常に特殊なケースでは、さらにidがどのように使用されるかを説明できます。おそらく、ラジオ ボタンにラベルが必要になるからです。ラベルにはfor属性があり、入力のidを使用してこのラベルを入力にリンクします (ラベルをクリックすると、ボタンがチェックされます)。例を以下に示します
<input id="button_1" type="radio" name="option" /><label for="button_1">Text for button 1</label>
<input id="button_2" type="radio" name="option" /><label for="button_2">Text for button 2</label>
IDは一意である必要があります
...ページ内のDOM要素ツリー。これにより、各コントロールは、クライアント側(ブラウザページ内)で個別にアクセスできます。id
- ページに読み込まれたJavaScriptスクリプト
- ページで定義されたCSSスタイル
ページに一意でないIDがある場合でもページはレンダリングされますが、確かに有効ではありません。無効なHTMLを解析する場合、ブラウザは非常に寛容です。しかし、それが機能しているように見えるという理由だけでそれをしないでください。
名前は非常に多くの場合一意ですが、共有することができます
...同じタイプの複数のコントロール間のページDOM内(ラジオボタンを考えてください)。したがって、データがサーバーにPOSTされると、特定の値のみが送信されます。したがって、ページに複数のラジオボタンがvalue
ある場合、同じの関連するラジオボタンコントロールがいくつかある場合でも、選択したものだけがサーバーにポストバックされますname
。
サーバーへのデータ送信の補足:データがサーバーに送信されると(通常はHTTP POSTリクエストによって)、すべてのデータは名前と値のペアとして送信されます。ここで、名前は
name
入力HTMLコントロールの名前であり、値はvalue
入力/選択されたとおりです。ユーザー。これは、Ajax以外のリクエストには常に当てはまります。Ajaxリクエストでは、開発者はサーバーに必要なものを送信できるため、名前と値のペアはページ上のHTML入力コントロールから独立させることができます。多くの場合、値は入力コントロールからも読み取られますが、必ずしもそうとは限りません。
名前を複製できる場合
任意のフォーム入力タイプのコントロール間で名前を共有すると便利な場合があります。でもいつ?サーバープラットフォームが何であるかについては述べていませんが、ASP.NET MVCのようなものを使用した場合は、自動データ検証(クライアントとサーバー)の利点が得られ、送信されたデータを強力な型にバインドすることもできます。つまり、これらの名前はタイププロパティ名と一致する必要があります。
ここで、次のシナリオがあるとします。
- 同じタイプのアイテムのリストを含むビューがあります
- ユーザーは通常、一度に1つのアイテムを操作するため、1つのアイテムのみでデータを入力し、サーバーに送信します。
したがって、ビューのモデル(リストが表示されるため)はタイプIEnumerable<SomeType>
ですが、サーバー側はタイプの単一のアイテムのみを受け入れますSomeType
。
では、名前の共有はどうですか?
各アイテムは独自のFORM
要素内にラップされ、その中の入力要素は同じ名前を持っているため、データが(任意の要素から)サーバーに到達すると、コントローラーアクションで予期される文字列タイプに正しくバインドされます。
この特定のシナリオは、私のクリエイティブストーリーミニサイトで見ることができます。言語はわかりませんが、これらの複数のフォームと共有名を確認することはできます。ID
sも重複していることを気にしないでください(これはルール違反です)が、それは解決できます。この場合は問題ではありません。
name
フォームフィールドを識別します* ; そのため、そのようなフィールド(ラジオボタン、チェックボックス)の複数の可能な値を表すために立つコントロールで共有できます。フォーム値のキーとして送信されます。id
DOM要素を識別します。そのため、CSSまたはJavaScriptのターゲットにすることができます。
*名前'はローカルアンカーを識別するためにも使用されますが、これは非推奨であり、現在では'id'が推奨される方法です。
name
値が (URL または投稿されたデータで) 渡されるときに使用される名前です。CSS スタイルと JavaScript の要素を一意id
に識別するために使用されます。
id
アンカーとしても使用できます。昔は<a name
が使われていましたが、id
アンカーにも を使うべきです。name
フォームデータを投稿するだけです。
nameは、DOM (Document Object Model)でのフォーム送信に使用されます。
IDは、特に JavaScript と CSS で、DOM 内の HTML コントロールの一意の名前に使用されます。
入力の属性は、その要素をリクエストの HTTP フォームのメンバーとして、またはリクエストのクエリ文字列として含めるためにname
、その親 HTML によって使用されます。<form>
POST
GET
はid
、操作のために DOM 内の要素を選択するために JavaScript によって使用され、CSS セレクターで使用される必要があるため、一意である必要があります。
次の簡単な例が参考になることを願っています。
<!DOCTYPE html>
<html>
<head>
<script>
function checkGender(){
if(document.getElementById('male').checked) {
alert("Selected gender: "+document.getElementById('male').value)
}else if(document.getElementById('female').checked) {
alert("Selected gender: "+document.getElementById('female').value)
}
else{
alert("Please choose your gender")
}
}
</script>
</head>
<body>
<h1>Select your gender:</h1>
<form>
<input type="radio" id="male" name="gender" value="male">Male<br>
<input type="radio" id="female" name="gender" value="female">Female<br>
<button onclick="checkGender()">Check gender</button>
</form>
</body>
</html>
コードでは、「男性」または「女性」の間の任意性を定義するために両方の「名前」属性が同じですが、「ID」はそれらを区別するために等しくないことに注意してください。
同じ名前を使用する興味深いケース: 次のようなinput
型の要素checkbox
:
<input id="fruit-1" type="checkbox" value="apple" name="myfruit[]">
<input id="fruit-2" type="checkbox" value="orange" name="myfruit[]">
少なくとも応答が PHP によって処理される場合、両方のボックスをチェックすると、POST データは次のように表示されます。
$myfruit[0] == 'apple' && $myfruit[1] == 'orange'
name
そのような配列の構築が他のサーバー側言語で発生するのか、それとも属性の値が文字列としてのみ扱われ、0 から始まる配列が取得されるのは PHP 構文のまぐれなのかはわかりません。 POST 応答のデータの順序に基づいて作成されます。これは次のとおりです。
myfruit[] apple
myfruit[] orange
ID でそのようなトリックを行うことはできません。HTML の id 属性の有効な値は何ですか?のいくつかの回答 HTML 4 の仕様を引用しているように見えます (ただし、引用はしていません)。
ID および NAME トークンは文字 ([A-Za-z]) で始まり、その後に任意の数の文字、数字 ([0-9])、ハイフン ("-")、アンダースコア ("_") が続く場合があります、コロン (":")、およびピリオド (".")。
そのため、HTML4 の ID または名前では文字[
と]
は有効ではありません (HTML5 では問題ありません)。しかし、多くの html と同様に、有効でないからといって、それが機能しない、または非常に有用ではないという意味ではありません。
JavaScript/CSS を使用している場合は、コントロールの「id」を使用して CSS/JavaScript を適用する必要があります。
nameを使用すると、CSS はそのコントロールに対して機能しません。たとえば、テキスト ボックスにアタッチされた JavaScript カレンダーを使用する場合、テキスト コントロールのIDを使用して JavaScript カレンダーを割り当てる必要があります。