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