2

我的 xhtml 文件中有一个 javascript 代码。这里是:

<h:head>
    <h:outputStylesheet library="css" name="styles.css"  /> 
     <script>
            function dataTableSelectOneRadio(radio) {
                var id = radio.name.substring(radio.name.lastIndexOf(':'));
                var el = radio.form.elements;
                for (var i = 0; i < el.length; i++) {
                    if (el[i].name.substring(el[i].name.lastIndexOf(':')) == id) {
                        el[i].checked = false;
                    }
                }
                radio.checked = true;
            }
        </script>
</h:head>

问题在于,在 for 循环中,它为“<”运算符给出错误,说“元素的内容必须由格式良好的字符数据或标记组成。”。我认为它将“<”视为一个 html 元素,即“body、html 等,但我不确定。我该如何解决这个问题?

谢谢

编辑:我现在尝试了这个,但仍然是一个错误。您是否看到语法错误?

<script>
            function dataTableSelectOneRadio(radio) {
                var id = radio.name.substring(radio.name.lastIndexOf(':'));
                var el = radio.form.elements;
                for (var i = 0; i &lt; el.length; i++) {
                    if (el[i].name.substring(el[i].name.lastIndexOf(':')) == id) {
                        el[i].checked = false;
                    }
                }
                radio.checked = true;
            }
        </script>

错误说:

myaccounts.xhtml:5:52 Expected ) but found ;
                for (var i = 0; i &lt; el.length; i++) {
                                                ^

myaccounts.xhtml:5:57 Expected ; but found )
                for (var i = 0; i &lt; el.length; i++) {
                                                     ^
4

2 回答 2

3

尝试使用CDATA为 XML 解析器不读取 javascript 内容,您的代码将是这样的:

<h:head>
    <h:outputStylesheet library="css" name="styles.css"  /> 
    <script>
        // <![CDATA[
        function dataTableSelectOneRadio(radio) {
            var id = radio.name.substring(radio.name.lastIndexOf(':'));
            var el = radio.form.elements;
            for (var i = 0; i < el.length; i++) {
                if (el[i].name.substring(el[i].name.lastIndexOf(':')) == id) {
                    el[i].checked = false;
                }
            }
            radio.checked = true;
        }
        // ]]>
    </script>
</h:head>
于 2013-07-07T12:00:43.637 回答
1

Facelets 是一种基于 XML 的视图技术。字符<>&是 XML 中的特殊字符。它们需要分别替换为&lt;&gt;&amp;

for (var i = 0; i &lt; el.length; i++) {
 // your code
}

最好将整个 JS 代码包装在一个<![CDATA[block中。

于 2013-07-07T12:01:09.463 回答