在onchange事件中,如何通过JavaScript改变PrimeFaces SelectOneMenu的值和显示值?
During a onchange event, how to change value and displayed value of PrimeFaces SelectOneMenu via JavaScript?
我正在使用 PrimeFaces 5.0(由于其他问题无法升级)。我有一个 SelectOneMenu。我给它绑定了一个 onchange 事件,这样当用户更改它时,我可以使用 confirm() 来提示用户确认操作。当用户点击否时,我需要把旧值放回去。
菜单如下所示:
<p:selectOneMenu
id="referenceTable"
widgetVar="referenceTable"
style="width:45%"
value="#{maintRefTabUi.selectedReferenceTable}"
onchange="changeReferenceTableDropdown();"
>
...snip...
函数如下所示:
function changeReferenceTableDropdown() {
if (DirtyFlag.isDirty) {
if (confirm('You have unsaved changes. Do you want to discard your changes and switch to another reference table?')) {
DirtyFlag.resetDirtyFlag();
changeReferenceTable();
} else {
// Pick one below
// Attempt 1: The .value property is reverted, but displayed value isn't
document.forms['tableSelectForm'].reset();
// Attempt 2: Same as attempt 1
PF('referenceTable').value = PF('referenceTable').preShowValue.val();
// Attempt 3: The dropdown box is reverted, but onchange got fired twice
PF('referenceTable').selectValue(PF('referenceTable').preShowValue.val());
// Attempt 4: .value and visually reverted, but if you click the dropdown box, the selected value jumps back to the discarded value
PF('referenceTable').revert();
}
} else {
changeReferenceTable();
}
}
我找不到任何关于 .selectValue() 和 onchange() 事件触发两次的信息。因为 JavaScript 设置 .value 不会触发 onchange(),.selectValue() 触发 onchange() 可能是一个错误。
有没有办法抑制onchange()?我也试过 onchange=null;然后把它放回去,但它没有用(onchange 仍然被解雇)。
或者有没有办法让SelectOneMenu根据.value更新它的显示?
我最终这样做了:
在与SelectOneMenu关联的setter中,我将旧值保存在另一个成员变量中。
在 SelectOneMenu 的 onchange() 事件中,如果用户取消,我会在 bean 中调用一个新方法来恢复旧值,然后更新 SelectOneMenu。
更多访问服务器而不是在客户端阻止它,但至少它完成了工作。
为什么不使用 Primefaces 确认对话框?
http://www.primefaces.org/showcase/ui/overlay/confirmDialog.xhtml
我可以想象,你的问题将会过时,因为你不能依赖 javascript 代码。
希望对您有所帮助!
我正在使用 PrimeFaces 5.0(由于其他问题无法升级)。我有一个 SelectOneMenu。我给它绑定了一个 onchange 事件,这样当用户更改它时,我可以使用 confirm() 来提示用户确认操作。当用户点击否时,我需要把旧值放回去。
菜单如下所示:
<p:selectOneMenu
id="referenceTable"
widgetVar="referenceTable"
style="width:45%"
value="#{maintRefTabUi.selectedReferenceTable}"
onchange="changeReferenceTableDropdown();"
>
...snip...
函数如下所示:
function changeReferenceTableDropdown() {
if (DirtyFlag.isDirty) {
if (confirm('You have unsaved changes. Do you want to discard your changes and switch to another reference table?')) {
DirtyFlag.resetDirtyFlag();
changeReferenceTable();
} else {
// Pick one below
// Attempt 1: The .value property is reverted, but displayed value isn't
document.forms['tableSelectForm'].reset();
// Attempt 2: Same as attempt 1
PF('referenceTable').value = PF('referenceTable').preShowValue.val();
// Attempt 3: The dropdown box is reverted, but onchange got fired twice
PF('referenceTable').selectValue(PF('referenceTable').preShowValue.val());
// Attempt 4: .value and visually reverted, but if you click the dropdown box, the selected value jumps back to the discarded value
PF('referenceTable').revert();
}
} else {
changeReferenceTable();
}
}
我找不到任何关于 .selectValue() 和 onchange() 事件触发两次的信息。因为 JavaScript 设置 .value 不会触发 onchange(),.selectValue() 触发 onchange() 可能是一个错误。
有没有办法抑制onchange()?我也试过 onchange=null;然后把它放回去,但它没有用(onchange 仍然被解雇)。
或者有没有办法让SelectOneMenu根据.value更新它的显示?
我最终这样做了:
在与SelectOneMenu关联的setter中,我将旧值保存在另一个成员变量中。
在 SelectOneMenu 的 onchange() 事件中,如果用户取消,我会在 bean 中调用一个新方法来恢复旧值,然后更新 SelectOneMenu。
更多访问服务器而不是在客户端阻止它,但至少它完成了工作。
为什么不使用 Primefaces 确认对话框?
http://www.primefaces.org/showcase/ui/overlay/confirmDialog.xhtml
我可以想象,你的问题将会过时,因为你不能依赖 javascript 代码。
希望对您有所帮助!