我正在使用PrimeFaces 5.0(由于其他问题无法升级)。我有一个SelectOneMenu。我为它绑定了一个onchange事件,以便在用户更改它时,可以使用confirm()提示用户确认该操作。当用户点击“否”时,我需要重新输入旧值。在onchange事件中,如何通过JavaScript更改PrimeFaces SelectOneMenu的值和显示值?
菜单如下:
<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也将使用新值。这是onchange()事件,所以更改已经应用在客户端SelectOneMenu中。如果我只能在SelectOneMenu上使用onclick事件! –
这可以帮助..? http://stackoverflow.com/questions/18787653/invoke-action-method-on-click-of-hselectonemenu – chaeschuechli
链接的文章建议使用valueChangedListener ...因此它已经交给了bean。我想在客户端阻止它,如果用户取消,请在下拉框中保留旧值。 –