使用JSF的Javascript奇怪的逻辑运算符行为:`&&`

时间:2018-03-29 14:48:01

标签: javascript xhtml logical-operators

我正在尝试使用javascript中的keydown事件,而我目前仍然遇到过以前从未发生过的事情:

var maxL = $("#myField").attr("maxLength")
console.log("Maximum Length : " + maxL);

if (e.key.length === 1 && str.length >= parseInt(maxL)) {
    console.log(">>>> in if");
    console.log(">>>> e.char == \"" + e.key + "\"");
    e.preventDefault();
}

当我加载页面时,它失败了。在调试时,我的服务器控制台记录此错误:

Error Parsing /folder/myPage.xhtml: Error Traced[line: 384] The entity name 
              must immediately follow the '&' in the entity reference.

其中384是if

的行

我单独尝试了两个条件,它们工作得很好,这让我觉得“&&”有问题。操作

如果这很重要,我在PrimeFaces的JSF中使用WebSphere服务器,我尝试在Chrome中运行它。 javascript嵌入在div中,以便在加载页面后删除它:

<div id="deleteScript">
    <SCRIPT>
        //my script code

        $("#deleteScript").remove();
    </SCRIPT>
</div>

4 个答案:

答案 0 :(得分:1)

看起来jsf正在解释你的js部分,好像它是xhtml。

使用<script><![CDATA[包裹您的脚本(在]]>标记之后)以使其按字面解释内容:

<script>
    <![CDATA[
        //your code
    ]]>
</script>

<![CDATA[ ... ]]>标记用于XML文件,以允许使用通常保留的字符,例如&#39;&amp;&#39;&#39; &GT;&#39;您可以在this answerhere上阅读更多内容。

答案 1 :(得分:1)

我实际上必须使用以下语法:

<div id="deleteScript">
    <SCRIPT>
        <!--//--><![CDATA[//><!--
            //my script code

            $("#deleteScript").remove();
        //--><!]]>
    </SCRIPT>
</div>

我可以在this other answer找到。 BalusC似乎认为,如果我们使用旧的Web浏览器,我们应该只使用这个解决方案,但是当我们处理旧的JSF服务器时,它似乎也是必要的。

答案 2 :(得分:0)

这不是浏览器的问题;您的服务器似乎正在尝试操作“&amp;&amp;”。也许你必须在你的代码中逃避它。

答案 3 :(得分:-3)

问题来自于您在html脚本标记中编写了JS。如果我是你,我会怎么做:

<div id="deleteScript">
    <script src="path/to/script.js"></script>
</div>

由于脚本标记位于带有ID&#34; deleteScript&#34;的div内,因此当脚本加载时该元素将存在,您可以将其删除。