【问题标题】:Javascript weird logical operator behavior using JSF : `&&`使用 JSF 的 Javascript 奇怪的逻辑运算符行为:`&&`
【发布时间】:2018-03-29 14:48:01
【问题描述】:

我正在尝试在 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>

【问题讨论】:

  • 您使用的是哪种浏览器?
  • chrome : 好点
  • 看起来 jsf 正在解释你的 js 的一部分,就好像它是 EL 一样。用&lt;![CDATA[]]&gt; 包装你的脚本(在&lt;script&gt; 标签之后)
  • 实际上不是重复的,而是相同的解决方案stackoverflow.com/questions/17443461/…
  • 需要更多执行上下文。代码很好。

标签: javascript xhtml logical-operators


【解决方案1】:

我实际上不得不使用以下语法:

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

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

我可以在 this other answer 上找到。 BalusC 似乎认为我们应该只在我们为较旧的 Web 浏览器工作时才使用此解决方案,但当我们在较旧的 JSF 服务器上工作时似乎也有必要。

【讨论】:

  • 你的&lt;script&gt;标签去哪儿了?
  • 对不起,我忘记放了!
【解决方案2】:

看起来 jsf 将部分 js 解释为 xhtml。

&lt;![CDATA[]]&gt; 包装您的脚本(在&lt;script&gt; 标记之后),使其按字面意思解释内容:

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

&lt;![CDATA[ ... ]]&gt; 标签用于 XML 文件中,以允许使用通常保留的字符,例如“&”、“>”等。您可以在 this answer 和 @ 上阅读更多信息987654322@.

【讨论】:

    【解决方案3】:

    这不是浏览器的问题;看起来您的服务器正在尝试对“&&”进行操作。也许你必须在你的代码中转义它。

    【讨论】:

    • 如果它说 如何 转义 & 符号,这将是一个更好的答案。如果它提到还要寻找
    【解决方案4】:

    问题出在你的 JS 写在 html 脚本标签中。如果我是你,我会怎么做:

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

    由于脚本标签在 ID 为“deleteScript”的div 内,因此该元素将在脚本加载时存在,您可以将其删除。

    【讨论】:

    猜你喜欢
    • 2019-09-06
    • 2012-05-03
    • 2016-09-01
    • 2012-08-22
    • 1970-01-01
    • 1970-01-01
    • 2011-09-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多