我正在执行以下 jQuery 函数<p:dataTable>
过滤器(其id是id
),允许用户在过滤器组件中仅输入数字。
$(document).ready(function() {
$("#form\\:dataTable\\:id\\:filter").keydown(function(event) {
//Allow: tab, escape, and enter
if(event.keyCode===9||event.keyCode===27||event.keyCode===13||
//Allow: Ctrl+A, Ctrl+C
(event.keyCode===65&&event.ctrlKey===true)||(event.keyCode===67&&event.ctrlKey===true)||
//Allow: home, end, left, right
(event.keyCode>=35&&event.keyCode<=39)){
//let it happen, don't do anything
event.preventCapture();
return;
}//backspace, delete
else if(event.keyCode===46||event.keyCode===8)
{
return;
}
else{//Ensure that it is a number and stop the keypress
if (event.shiftKey||(event.keyCode<48||event.keyCode>57)&&(event.keyCode< 96||event.keyCode>105)){
//event.preventDefault();
event.preventCapture();
}
}
});
});
该函数位于context/resources/default/js/digit_only_textfield.js
。因此,它可以用在 XHTML 页面上,例如:
<h:outputScript library="default" name="js/digit_only_textfield.js"/>
XHTML 页面如下所示。
<h:outputScript library="default" name="js/digit_only_textfield.js"/>
<h:form id="form" prependId="true">
<!--PrimeFaces extension <pe:blockUI>-->
<p:remoteCommand name="updateTable" update="dataTable"/>
<p:panel id="panel">
<h:panelGrid id="panelGrid" columns="3" cellpadding="5">
<!--Some UIInput components-->
<p:commandButton id="btnSubmit"
update="panel"
onstart="PF('blockUIWidget').block();"
oncomplete="if(!args.validationFailed) {updateTable();}PF('blockUIWidget').unblock();"
actionListener="#{bean.insert}"
value="Save"/>
</h:panelGrid>
</p:panel>
<p:dataTable id="dataTable"
var="row"
value="#{bean}"
filterEvent="keydown"
...
... >
...
...
<p:dataTable>
<h:form>
这个 jQuery 对于 id 为的过滤器工作得很好is
但是当这个<p:dataTable>
通过按给定更新<p:commandButton>
,它停止运行。
之后如何让这个功能发挥作用<p:dataTable>
是通过AJAX更新的吗?
引入了一个新的问题域:
ThisPrimeFaces 社区论坛上的问题和相应回复仍然无法为以下问题领域提供解决方法/解决方案。
如果按了错误的键(即非数字键,退格键除外,请删除
等)然后,数据表被不必要地更新,导致一些
对数据库发起昂贵的查询,这完全是
不必要并且必须防止数据表被更新.