【发布时间】:2013-12-12 06:40:41
【问题描述】:
我正在<p:dataTable> 过滤器(其 id 为 id)上执行以下 jQuery 函数,该函数允许用户在过滤器组件中仅输入数字。
$(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 更新后,如何使该功能生效?
引入了一个新的问题域:
This PrimeFaces 社区论坛上的问题和相应回复仍然无法解决以下问题。
如果按下了错误的键(即非数字键,退格键除外,请删除 等)然后,数据表被不必要地更新,导致一些 对数据库进行昂贵的查询,这完全是 不必要的并且必须防止更新数据表。
【问题讨论】:
-
在表格更新后,您是否尝试过再次运行 jQuery
keydown函数?如果表格在更新时由 PrimeFaces 从头开始渲染,则 jQuery on event trigger 将被删除。 -
只是PrimeFaces数据表中的一个过滤事件-
<p:dataTable>,filterEvent="keydown"的一个属性。 -
我不明白赏金和明显的新问题。
-
我本可以提出一个单独的问题,但除了问题中的块引用中的文本之外,大多数情况下情况相同。
-
这不是您自定义 jQuery 函数的全部意图吗?还是那部分不起作用?
标签: javascript jquery jsf primefaces jsf-2.2