Java 在datatable筛选器上添加onkeyup事件

Java 在datatable筛选器上添加onkeyup事件,java,jsf,primefaces,datatable,onkeyup,Java,Jsf,Primefaces,Datatable,Onkeyup,我想在此代码上添加javascript事件: <p:dataTable id="tblQueues" var="q" value="#{gateBacking.listQueue}" filteredValue="#{gateBacking.filteredQueues}" rowKey="#{q.queid}" selection="#{gateBacking.selectedQueue}" selectionMode="single" widgetVar="varQueu

我想在此代码上添加javascript事件:

<p:dataTable id="tblQueues" var="q" value="#{gateBacking.listQueue}" filteredValue="#{gateBacking.filteredQueues}" rowKey="#{q.queid}"  
     selection="#{gateBacking.selectedQueue}" selectionMode="single" widgetVar="varQueues"
     scrollable="true" scrollHeight="250">  
    ...
    <p:column headerText="License No" filterBy="#{q.fleet.licenseNo}" filterMatchMode="contains" >
        #{q.fleet.licenseNo}
    </p:column>
    ...
</p:dataTable> 
但它不起作用。我该怎么做?谢谢


更新

我尝试过这个,但不起作用:

<p:column headerText="License No" filterBy="#{q.fleet.licenseNo}" filterMatchMode="contains" filterEvent="formatLicense(this)">


更新2

<p:tabView id="tabViewGate">
    <p:tab id="tabCheckOut" title="Out">
        <h:form id="frmOut">
            <p:dataTable id="tblQueues" var="q" value="#{gateBacking.listQueue}" filteredValue="#{gateBacking.filteredQueues}" rowKey="#{q.queid}"  
                selection="#{gateBacking.selectedQueue}" selectionMode="single" widgetVar="varQueues"
                scrollable="true" scrollHeight="250">  
                ...
                <p:column id="colLicnu" headerText="License No" filterBy="#{q.fleet.licenseNo}" filterMatchMode="contains" >
                    #{q.fleet.licenseNo}
                </p:column>
                ...
            </p:dataTable> 

            <script type="text/javascript">
                $(document).ready(function(){
                    $("#frmOut\\:tblQueues\\:colLicnu\\:filter").keyup(function(){
                        //alert("Test"); //--> I tried this too but it doesn't work
                        if (input.value.length > 1)
                        {
                            var num = '1234567890';
                            var str = input.value[input.value.length-1];
                            var str2 = input.value[input.value.length-2];

                            if (num.indexOf(str) >= 0) {
                                if (!(num.indexOf(str2) >= 0)) 
                                    input.value = input.value.substring(0, input.value.length - 1) + " " + str;
                            }
                            else if (!(num.indexOf(str) >= 0)) {
                                if (num.indexOf(str2) >= 0)
                                    input.value = input.value.substring(0, input.value.length - 1) + " " + str;
                            }
                        }
                        input.value = input.value.replace("  "," ").toUpperCase();
                    });
                });
            </script>

        </h:form>
    </p:tab>
</p:tab>

...
#{q.fleet.licenseNo}
...
$(文档).ready(函数(){
$(“#frmOut\\:tblQueues\\:colLicnu\\:filter”).keyup(函数(){
//警报(“测试”);//-->我也试过了,但不起作用
如果(input.value.length>1)
{
var num='1234567890';
var str=input.value[input.value.length-1];
var str2=input.value[input.value.length-2];
如果(num.indexOf(str)>=0){
如果(!(num.indexOf(str2)>=0))
input.value=input.value.substring(0,input.value.length-1)+“”+str;
}
else如果(!(num.indexOf(str)>=0)){
如果(num.indexOf(str2)>=0)
input.value=input.value.substring(0,input.value.length-1)+“”+str;
}
}
input.value=input.value.replace(“,”).toUpperCase();
});
});

您可以通过一些jQuery魔术来实现这一点。我使用PrimeFaces 3.5来确定这个答案,但是你应该能够在你的上实现同样的结果。您需要做的第一件事是为HTML端的
输入
确定生成的
id
。您可以通过右键单击
输入
(用于筛选该列的输入)并选择查看源代码来执行此操作

注意:我发现简单地在
和您感兴趣的
中添加一个
id
(或者您可以在
上执行
prependId=“false”
来缩短它……无论您希望什么)。然后使用此javascript(伪代码)代码

这里有一个更具体的例子。下面是我的
的一部分。我只展示相关的部分。(不要担心对象,我在玩PrimeFaces showcase)

在我这边,这段代码位于
resources/javascript/jscript.js
下。因此,请记住在
中添加

更新

无论
id
是用于
输入的
复制并粘贴所有
。然后用双反斜杠转义冒号
。根据您的代码,它应该是

#tabViewGate\\:frmOut\\:tblQueues\\:colLicnu\\:filter
#A5290\\:tabViewGate\\:frmOut\\:tblQueues\\:colLicnu\\:filter
然而,从你的评论来看,你是说id是

A5290:tabViewGate:frmOut:tblQueues:colLicnu:filter 
应该如此

#tabViewGate\\:frmOut\\:tblQueues\\:colLicnu\\:filter
#A5290\\:tabViewGate\\:frmOut\\:tblQueues\\:colLicnu\\:filter

您使用的是什么版本的primefaces?谢谢。我再看一看。@Andy:Btw我试过了
filterEvent=“formatLicense(this)”
,但没用。@Andy:啊,对不起,我的primefaces是2.2,JSF是2.0.2,我想你只需要直接使用js或Jquery来实现你想要的。问题是我在想怎么称呼它。对不起,我现在太困了。如果有人到那时还没有给你答案,我会再次尝试。谢谢你,但我已经试过了,也是一样的。请看更新的问题。@mrjimoy_05一秒钟。寻找一个简单的例子。@Jimoy_05先生哦,不,这不行。这只是更改发生过滤时触发的事件。使用
change
代替
keyup
。让我看看还能找到什么。你可以直接使用
JQuery
或JS。试试这个,告诉我结果如何。嗨,安迪,非常感谢你的代码。但我已经尝试过你的解决方案,但仍然不起作用。我在Chrome中检查了
inspect element
中的ID,发现:
A5290:tabViewGate:frmOut:tblQueues:colLicnu:filter
。因此,我尝试将javascript上的ID替换为这个ID,但导致整个表无法过滤或排序。我已经在上面的更新2中附上了我代码的完整结构。请看一看。非常感谢你。。
A5290:tabViewGate:frmOut:tblQueues:colLicnu:filter 
#A5290\\:tabViewGate\\:frmOut\\:tblQueues\\:colLicnu\\:filter