我有以下简单的Javascript代码,只允许将数字输入指定的TextField
。我之前在很多地方使用它,比如Servlet,JSP,JSTL / EL,甚至在PHP中,它按预期工作得很好。但是在JSF中,我不太关心需要转义某些字符的Javascript。我尽力让它运行,但我不能。这是Javascript代码以及JSF的东西。
<?xml version='1.0' encoding='UTF-8' ?>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<h:head>
<title>Demo</title>
<script type="text/javascript" language="javascript">
$(document).ready(function()
{
$("#myForm:txtDemo").keypress(function(event)
{
if (event.keyCode==46 || event.keyCode==8|| event.keyCode==9 || event.keyCode>=35 && event.keyCode<=40)
{
// let it happen, don't do anything
}
else
{
if (event.charCode<48 || event.charCode>57 || event.charCode==16)
{
event.preventDefault();
}
}
});
});
</script>
</h:head>
<h:body>
<h:form id="myForm">
<br/><br/><br/>
<h:inputText id="txtDemo" required="true" requiredMessage="Mandatory." validatorMessage="The field should contain al least 10 digits">
<f:validateLength maximum="10" minimum="2"/>
<f:validateRegex pattern="[0-9]*"/>
<f:ajax event="valueChange" execute="txtDemo msg" render="txtDemo msg"/>
</h:inputText><br/>
<h:message id="msg" for="txtDemo" showDetail="true" style="color:red"/><br/>
<h:commandButton id="btnSubmit" value="Submit"/>
</h:form>
</h:body>
Javascript未编译。它解析了以下错误。
An Error Occurred:
Error Parsing /Restricted/TempTags.xhtml: Error Traced[line: 14] The entity name
must immediately follow the '&' in the entity reference.
我甚至将Javascript代码放在单独的js
文件中,并将该文件包含在此页面中。我还将<script></scrip>
替换为<h:outputScript></h:outputScript>
仍然存在同样的问题。
我还尝试了以下内容,看看是否正在调用Javascript函数,使用alert();
从函数中删除错误解析代码,但函数本身甚至没有调用,警报消息也没有显示。
<script type="text/javascript" language="javascript">
$(document).ready(function()
{
$("#myForm:txtDemo").keypress(function(event)
{
alert();
});
});
</script>
Javascript中需要进行哪些必要的更改才能使其按预期运行?
答案 0 :(得分:4)
这是XHTML,所以你需要
Wrap the script contents in CDATA
tags:
<script>
//<![CDATA[
$(document).ready(function()
{
// snip...
}
//]]>
</script>
或者,将脚本移至外部文件,并使用<h:outputScript />
将其包含在内。
答案 1 :(得分:1)
如果您使用的是jQuery,则需要使用如下特殊字符引用元素的ID:
<h:form id="myForm">
<h:inputText id="myInput" />
</h:form>
<script type="text/javascript>
$("#myForm\\:myInput").val("some value");
</script>
这是记录here(在页面顶部)。
答案 2 :(得分:0)
我发现了同样的问题,我解决了:
if (event.keyCode==46 || event.keyCode==8|| event.keyCode==9 || event.keyCode>=35 && event.keyCode<=40) {
// let it happen, don't do anything
}
它并不酷,但它确实有效。