【问题标题】:Element type "myelement" must be followed by either attribute specifications, ">" or "/>元素类型“myelement”必须后跟属性规范,“>”或“/>
【发布时间】:2012-01-23 14:49:39
【问题描述】:

我的脚本函数是在 XHTML 页面上的 JSF2 表单中定义的,以下代码部分会导致问题:

<script type="text/javascript">
  function myFunction(){
   var checkboxes = document.getElementsByName('mycheckboxes');
   if(checkboxes.length > 0){
     for (var i=0; i<checkboxes.length; i++){
      var checkbox = checkboxes[i];
     }
    }
  }
</script>

当尝试访问 FireFox 8 中的页面时,它会打印异常:

元素类型“checkboxes.length”必须后跟属性规范,“>”或“/>”

这个错误是什么意思?

另一个问题:脚本是在页面渲染之前执行的吗?因为我的复选框是在页面的渲染阶段加载到页面中的(使用 JSF &lt;ui:repeat&gt;),所以我的猜测是当变量 checkboxes 不为空时,我必须创建一个条件来执行代码,对吗?

【问题讨论】:

  • 脚本在解析时执行,因此它可能在 DOM 元素存在之前执行。
  • 您的文档是 XHTML 还是您忘记将脚本放入 &lt;script&gt; 标记?
  • 该错误看起来像是试图将您的 JavaScript 解释为 HTML。究竟是什么给出了错误?浏览器?还是 HTML 验证器? JavaScript 如何包含在 script 元素或单独的 JavaScript 文件中?
  • 我不知道 JSF,但是你的 Javascript 有 //&lt;![CDATA[ 和 //]]&gt; 吗?它似乎将&lt;checkboxes.length 解释为标签。
  • 您确定它在脚本中吗?这听起来像一个 HTML 错误。实际上,听起来有点……很奇怪。

标签: javascript html jsf


【解决方案1】:

看起来您正在使用 XHTML 并在页面中嵌入脚本。

XML 没有内在的 CDATA 部分,因此 &amp;lt; 表示“标记开始”,即使在脚本元素中也是如此。

如果您使用的是真正的 XHTML,那么您可以将其表示为 &amp;lt;,但是您不能将文档提供为 text/html。

相反,您可以使用显式 CDATA 部分将脚本内容包装为 described in the specification,同时注意遵循相关的 text/html compatibility guidelines。

您最好将脚本保存在外部文件中并使用&lt;script src="..."&gt;&lt;/script&gt; 加载它。

就此而言,您可能最好使用 HTML 而不是编写 XHTML,然后跳过障碍使其在需要 HTML 的浏览器中工作。

【讨论】:

    【解决方案2】:
    【解决方案3】:

    如果您直接在 JSF 源代码中编写此脚本 - 您必须使用 &amp;gt;、&amp;amp; 转义 &gt;、&lt;、&amp; 等符号...

    另一种方法是使用CDATA部分:

    <script language="javascript">//<![CDATA[
    
    /* here your script */
    
    //]]>
    </script>
    

    另见:

    http://www.w3schools.com/xml/xml_cdata.asp

    What characters do I need to escape in XML documents?

    【讨论】:

      猜你喜欢
      • 2017-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-27
      • 2014-01-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多