1

オプションを動的に作成する選択タグの横にスクリプトタグを追加しました。関数は正常に動作しますが、W3C バリデーターはこの構文に関して 4 つのエラーを返します。この問題の解決策を見つけていただければ助かります。

これらは、2 回繰り返される 2つのエラーです。

1.ドキュメント タイプでは、ここで要素「script」を使用できません

2. year_option(); 終了していない「select」の終了タグ

4

3 に答える 3

2

1)<select>持つことができる唯一のタグは、バリデーターが不平を言っているタグ<option>とタグです。これは、これらのいずれでもないためです。ブラウザーは、無効なマークアップを有効なものに変換するために最善を尽くしているため、機能しているにもかかわらず、そのため、実際にタグを<optgroup><script><script><select>

2) スクリプト タグはページの下部に配置する必要があります。オプション タグをそこに配置する代わりにdocument.write、DOM メソッドを使用して、事後に select 要素にオプションを追加します。

<select name="select-box"></select>
<!-- ...rest of page... -->
<script src="external-script.js"></script>

/* contents of external-script.js */
var select_box = document.querySelector("select[name=select-box]"),
    bob_opt  = document.createElement("option"),
    doug_opt = document.createElement("option");

bob_opt.value  = "Bob";
doug_opt.value = "Doug";
bob_opt.appendChild(document.createTextNode("Bob"));
doug_opt.appendChild(document.createTextNode("Doug"));

select_box.appendChild(bob_opt);
select_box.appendChild(doug_opt);

これを行うには、より速くてきちんとした、またはより精巧で柔軟な方法がありますが、これは次のようなものよりも「正しい方法」に近いです。

<select>
    <script>document.write("<option value=\"" + i + "\">one</option>");</script>
</select>

または、現在そこにあるものは何でも。JSは、その目的でテンプレートライブラリを使用/作成せずに、そのようにテンプレート化することを意図していません。

于 2013-03-12T06:37:16.830 に答える
0

を使用してページをロードした後、タグをページにレンダリングするときにJavaScript、タグを外側に配置したり、後でタグselectを追加したりできます。optionselect$(document).ready

JavaScript を別のファイルに配置することでコードを標準化できます。

$(document).ready(function(){
//Your code to init all things,
//e.g. load options in select box etc..
//so It will be easy later to maintain the code, all init code will go here
});

または、jquery を使用していない場合は、以下のコードを使用できます

function your_function(){
//your init code will go here
}
document.getElementsByTagName("body")[0].onLoad = your_function;

それだけです。コードを配置してくださいyour_function()

于 2013-03-12T06:34:48.107 に答える
0

1) スクリプト タグは head またはドキュメントの他の場所に配置する必要がありますが、select タグ内には配置しないでください。

2) タグが見つからないか、最初のエラーのためにタグを見つけるのに問題があるようです。

于 2013-03-12T06:23:55.293 に答える