【发布时间】:2013-01-05 17:35:27
【问题描述】:
似乎 Primefaces p:selectOneMenu 组件将呈现的 HTML <select> 标签包装在一个 div 中,并将所选项目显示为不同的标签。我猜用户所做的更改会通过javascript反映到原始<select>,导致绑定到<select>的onchange事件不起作用。因此,我对所有:inputs 的 onchange 事件的以下绑定不适用于p:selectOneMenus。
function applyChangeHandler() {
$(':input').on('change', function() {
console.log('on change: ' + this.id);
});
}
但是p:selectOneMenu 的 onchange 属性正在被触发。所以 Primefaces 在后台触发了这个处理程序(我猜也是)。
<p:selectOneMenu id="myList" onchange="console.log('selectOneMenu')">
<f:selectItem itemLabel="val1" itemValue="val1"/>
<f:selectItem itemLabel="val2" itemValue="val2"/>
</p:selectOneMenu>
所以我的要求是以某种方式将 onchange 处理程序绑定到上面 applyChangeHandler() 函数中的所有p:selectOneMenus。或者它可以通过 Primefaces 特定的 API 或我希望你们分享的其他方式手动触发。否则,一个快速的解决方法是改用h:selectOneMenu。
我的目标是检测“页面上未保存的更改”。所以上面的脚本将被放置在一个通用模板中:
<p:outputPanel id="sc" autoUpdate="true">
<script type="text/javascript">
applyChangeHandler();
</script>
</p:outputPanel>
【问题讨论】:
标签: javascript jquery jsf-2 primefaces