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

Javascript コンテンツを読み取らないように XML パーサーにCDATAを使用してみてください。コードは次のようになります。

<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[ブロックでラップすることをお勧めします。

于 2013-07-07T12:01:09.463 に答える