1

我在一个动态创建选项的选择标签中添加了一个脚本标签。该函数工作正常,但 W3C 验证器给了我关于此语法的 4 个错误。如果你们能找到我解决这个问题的方法,那将会很有帮助。

这些是重复 2 次的2 个错误。

1.文档类型不允许元素“脚本”在这里

2. year_option(); 未完成的“选择”的结束标签

4

3 回答 3

2

1)唯一<select>可以拥有的<option>标签<optgroup>是验证器抱怨的标签,因为<script>它不是其中之一——浏览器正在尽最大努力将你的无效标记变成有效的东西,所以尽管它确实有效,这就是你得到错误的原因,如果你实际上是把<script>标签放在一个<select>

2)你的脚本标签应该在你的页面底部,而不是使用document.write将选项标签放在那里,使用DOM方法在事后将选项添加到选择元素

<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

1) 脚本标签应该位于 head 中,或者文档中的其他位置,但不能位于 select 标签内

2) 看起来您缺少标签,或者由于第一个错误而无法找到它。

于 2013-03-12T06:23:55.293 回答
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 回答