在onchange事件期间,如何通过JavaScript更改PrimeFaces SelectOneMenu的值和显示值?

时间:2016-07-22 07:56:25

标签: javascript jsf primefaces onchange

我正在使用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?

更新其显示

2 个答案:

答案 0 :(得分:0)

我最终这样做了:

在与SelectOneMenu关联的setter中,我将旧值保存在另一个成员变量中。

在SelectOneMenu的onchange()事件中,如果用户取消,那么我在bean中调用一个新方法来恢复旧值,然后更新SelectOneMenu。

更多访问服务器而不是在客户端阻止它,但至少它完成了工作。

答案 1 :(得分:0)

为什么不使用Primefaces确认对话框?

http://www.primefaces.org/showcase/ui/overlay/confirmDialog.xhtml

我可以想象,你的问题将会过时,因为你不能依赖javascript代码。

我希望这有帮助!