10

私の特定の例では、ドロップダウンを扱っています。例:

<select name="foo" id="bar">
  <option disabled="disabled" selected="selected">Select an item:</option>
  <option>an item</option>
  <option>another item</option>
</select>

もちろん、それはかなり無意味ですが、厳密な動作が定義されているかどうか疑問に思っています。Operaは「選択された」属性を効果的に拒否し、リスト内の次の項目を選択します。他のすべてのブラウザはそれを許可しているように見え、選択されたままになります。

更新:明確にするために、私は特に最初の選択に興味があります。私はそれらの1つを扱っています'アイテムを選択してください:'-ドロップダウンを入力します。この場合、最初のオプションは実際にはラベルであり、アクションが発生しますonchange()。これは、送信ボタンが存在し、JavaScriptを介してのみ削除されるという点で、かなりよく「プログレッシブエンハンスド」されています。「選択...」オプションが削除された場合、最初のアイテムになるものは何でも選択できなくなります。ドロップダウンを完全に除外するだけですonchangeか、それとも「選択...」オプションを選択可能にする必要がありますが、効果はありませんか?

4

6 に答える 6

6

この奇妙な組み合わせに関して、HTMLの仕様は少しあいまいです(つまり、完全に欠けています)。属性が無効に設定されているフォーム要素は成功しないはずなので、実際には選択できないと言われています。

ブラウザは、選択されたように見えるようにレンダリングすることもできますが、POSTされたデータには表示されません。Operaは私にそれを正しく理解しているように見えます。

于 2008-09-08T14:26:54.310 に答える
3

HTML 仕様では、選択されたものと無効なものの両方が要素で使用可能なオプションである<option>と述べられていますが、競合が発生した場合に何が起こるかは指定されていません。無効なコントロールのセクションでは、それは言う

disabled 属性を設定すると、要素に対して次のような効果があります。

  • 無効なコントロールはフォーカスを受け取りません。
  • 無効なコントロールは、タブ ナビゲーションでスキップされます。
  • 無効化されたコントロールは成功しません。

それはまた言います

無効な要素がどのようにレンダリングされるかは、ユーザー エージェントによって異なります。たとえば、一部のユーザー エージェントは、無効なメニュー項目やボタン ラベルなどを「グレー表示」します。この例では、INPUT 要素が無効になっています。したがって、ユーザー入力を受け取ることも、その値をフォームとともに送信することもできません。

この特定のケースは指定されていませんが、これを読んだところ、「選択された」「無効化された」要素の実際のレンダリングはブラウザーに任されていることがわかりました。ユーザーが選択できない限り、標準として機能します。スクリプトは要素に作用できると言っているので、Javascript が無効なオプションを選択済みとして設定する (または選択したオプションを無効にする) ことが可能です。これは標準に反するものではありませんが、フォームの送信時に、そのオプションの値を選択した値にすることはできませんでした。この場合、選択リストには空の値が必要です(私は推測します)。

于 2008-09-08T14:32:51.800 に答える
2

質問の更新に返信して、「ラベル」オプションを選択できるようにする必要がありますが、送信時または JavaScript 経由で何もしないようにし、値が選択されていない状態でフォームを送信できないようにします (必須フィールド)。

使いやすさの観点から、両方を行うことをお勧めします。そうすれば、すべてのベースがカバーされます。

于 2008-09-08T14:54:17.927 に答える
1

HTML 4.01 仕様によると、disabledoption 要素の標準属性ですが、動作はおそらく標準に基づいて不確定です (select 要素と options 要素に関する情報を読んでください。 Opera が実装する理由:

disabled 属性を設定すると、要素に対して次のような効果があります。
* 無効なコントロールはフォーカスを受けません。
* 無効なコントロールは、タブ ナビゲーションでスキップされます。
* 無効化されたコントロールは成功しません。

したがって、これは仕様が曖昧で両方の解釈が可能なものの 1 つにすぎない可能性が非常に高いです。これは、Web 向けのプログラミングをとても楽しくやりがいのあるものにしている一種の特異性です。:P

于 2008-09-08T14:33:05.310 に答える
0

「onchange」ドロップダウンを完全に除外するだけですか、それとも「select ...」オプションを選択可能にする必要がありますが、効果はありませんか?

「onchange」ドロップダウンは、より標準にこだわったタイプに嫌われています。

私は通常、クライアント側の検証を行います。「ドロップダウンからアイテムを選択してください」というようなものです。すなわち

「select...」オプションは、効果がないだけで選択可能である必要がありますか?

だから私はあなたのAまたはBの質問に「はい」と言いました。:/ ごめん!

于 2008-09-08T15:13:06.353 に答える
0

残念ながら、IE は options period の disabled 属性をサポートしていないため、どうなるかは問題ではありません。

http://webbugtrack.blogspot.com/2007/11/bug-293-cant-disable-options-in-ie.html

于 2008-10-03T18:27:05.333 に答える