为什么这不会验证(jquery问题)?

时间:2009-05-19 14:05:46

标签: jquery validation xhtml-1.0-strict xhtml

在我的网站上,我正在使用jquery循环插件进行带有寻呼机的幻灯片放映。 这个例子: http://malsup.com/jquery/cycle/pager.html

所以在我的文档的头部,我有一个类似于:

的脚本
<script type="text/javascript">
$('#s4').before('<div id="nav">').cycle({ 
    fx:     'turnDown', 
    speed:  'fast', 
    timeout: 3000, 
    pager:  '#nav' 
});
</script>

我的doc类型是XHTML Strict。

当我尝试验证页面时,出现以下错误: “文档类型不允许元素”div“here” 和 “省略了”div“的结束标记,但指定了OMITTAG NO”因为div标记未关闭。

有没有办法使用jquery并让它验证?

3 个答案:

答案 0 :(得分:8)

如果您将HTML注释标记放入脚本块,验证程序将忽略该代码块并正确验证。

<script type="text/javascript">
<!--
$('#s4').before('<div id="nav">').cycle({ 
    fx:     'turnDown', 
    speed:  'fast', 
    timeout: 3000, 
    pager:  '#nav' 
});
//-->
</script>

答案 1 :(得分:8)

实际上,您的代码未验证的原因是因为XHTML中不允许使用某些字符(例如“<”等),因此必须将它们包装在CDATA个部分中在XHTML中(由于XML解析规则的严格性)。 HTML评论标记(明确地,双短划线“--”)也是不允许的,不应出现在SCRIPT块中,因为它们不是有效可理解的JavaScript。因此,不应使用HTML注释标记,而应将代码包装在“CDATA标记的部分”中以传递验证器,而不是混淆JavaScript引擎:

<script type="text/javascript">
//<![CDATA[
$('#s4').before('<div id="nav">').cycle({ 
    fx:     'turnDown', 
    speed:  'fast', 
    timeout: 3000, 
    pager:  '#nav' 
});
//]]>
</script>

有关详细信息,请查看以下页面:

  1. XHTML 1.0 recommendation: 4.8. Script and Style elements
  2. Properly Using CSS and JavaScript in XHTML Documents

答案 2 :(得分:1)

你可以通过这样做来摆脱错误:

$('#s4').before('<' + 'div id="nav">').cycle({ ...

这应该使验证程序不会检测脚本标记内的任何HTML。我 - 我会接受错误,知道验证器的问题不是我的代码。