Javascript 使用 JSF 的奇怪逻辑运算符行为:`&&`
Javascript weird logical operator behavior using JSF : `&&`
我正尝试在 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
所在的行
我在dividually 中尝试了这两种情况,它们工作得很好,这让我认为“&&”运算符有问题。
如果这很重要,我在 JSF 中使用 PrimeFaces 在 WebSphere 服务器上工作,我尝试 运行 它在 Chrome 中。 javascript 嵌入在 div 中,以便在加载页面后将其删除:
<div id="deleteScript">
<SCRIPT>
//my script code
$("#deleteScript").remove();
</SCRIPT>
</div>
这不是浏览器的问题;看起来您的服务器正在尝试对“&&”进行操作。也许你必须在你的代码中转义它。
问题出在您的 JS 写在 html 脚本标签中。如果我是你,我会做的是:
<div id="deleteScript">
<script src="path/to/script.js"></script>
</div>
由于脚本标签位于 ID "deleteScript" 的 div
中,该元素将在脚本加载时存在,您可以将其删除。
看起来 jsf 正在将您的部分 js 解释为 xhtml。
用 <![CDATA[
和 ]]>
包装您的脚本(在 <script>
标记之后),使其按字面意思解释内容:
<script>
<![CDATA[
//your code
]]>
</script>
<![CDATA[
... ]]>
标签用于 XML 文件,以允许使用通常保留的字符,例如“&”、“>”等。您可以在 this answer and here.
上阅读更多内容
我实际上不得不使用以下语法:
<div id="deleteScript">
<SCRIPT>
<!--//--><![CDATA[//><!--
//my script code
$("#deleteScript").remove();
//--><!]]>
</SCRIPT>
</div>
我可以在 this other answer 上找到。 BalusC 似乎认为我们应该只在为较旧的 Web 浏览器工作时才使用此解决方案,但当我们在较旧的 JSF 服务器上工作时似乎也有必要。
我正尝试在 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
所在的行
我在dividually 中尝试了这两种情况,它们工作得很好,这让我认为“&&”运算符有问题。
如果这很重要,我在 JSF 中使用 PrimeFaces 在 WebSphere 服务器上工作,我尝试 运行 它在 Chrome 中。 javascript 嵌入在 div 中,以便在加载页面后将其删除:
<div id="deleteScript">
<SCRIPT>
//my script code
$("#deleteScript").remove();
</SCRIPT>
</div>
这不是浏览器的问题;看起来您的服务器正在尝试对“&&”进行操作。也许你必须在你的代码中转义它。
问题出在您的 JS 写在 html 脚本标签中。如果我是你,我会做的是:
<div id="deleteScript">
<script src="path/to/script.js"></script>
</div>
由于脚本标签位于 ID "deleteScript" 的 div
中,该元素将在脚本加载时存在,您可以将其删除。
看起来 jsf 正在将您的部分 js 解释为 xhtml。
用 <![CDATA[
和 ]]>
包装您的脚本(在 <script>
标记之后),使其按字面意思解释内容:
<script>
<![CDATA[
//your code
]]>
</script>
<![CDATA[
... ]]>
标签用于 XML 文件,以允许使用通常保留的字符,例如“&”、“>”等。您可以在 this answer and here.
我实际上不得不使用以下语法:
<div id="deleteScript">
<SCRIPT>
<!--//--><![CDATA[//><!--
//my script code
$("#deleteScript").remove();
//--><!]]>
</SCRIPT>
</div>
我可以在 this other answer 上找到。 BalusC 似乎认为我们应该只在为较旧的 Web 浏览器工作时才使用此解决方案,但当我们在较旧的 JSF 服务器上工作时似乎也有必要。