我有一个相当复杂的表单与PrimeFaces 4.0构建,我想添加一些客户端jQuery/Javascript-Code应该被触发,如果任何表单输入字段的值发生变化。
对于<p:inputText>
和<p:selectBooleanCheckbox>
,我可以用$(this).change(handler);
注册一个事件处理程序
我如何为<p:selectonemenu>
注册这个处理程序?在元素本身或嵌入的_input
-Field上注册处理程序不会在我更改值时触发处理程序。
注意:我不想直接在Primefaces-Tag上设置处理程序,而是通过jQuery动态地设置。
任何帮助都是非常感激的,谢谢!
找到解决方案:Primefaces创建了一个单独的面板,用于显示用户单击<p:selectonemenu>
时显示的选项。这个面板的id是选择菜单的id +"_panel"。因为它是一个面板而不是任何类型的输入,所以必须使用click()
而不是change()
例子:
$(PrimeFaces.escapeClientId($(this).attr('id')+"_panel")).click(handler);
显然,在处理程序中,你必须像这样切换回菜单:
if($(this).attr('id').endsWith('_panel')){
widget = $(PrimeFaces.escapeClientId($(this).attr('id').substring(0,$(this).attr('id').length - '_panel'.length)));