2016-07-22 61 views
0

我正在使用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更新其显示?

回答

0

我落得这样做:

在与selectOneMenu用于相关的二传手,我保存在另一个成员变量旧值。

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

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

0

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

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

我能想象,你的问题将被淘汰,因为你必须不依赖于JavaScript代码。

我希望这有助于!

+0

我试过了;使用确认对话框有相同的问题,即使用户取消,SelectOneMenu也将使用新值。这是onchange()事件,所以更改已经应用在客户端SelectOneMenu中。如果我只能在SelectOneMenu上使用onclick事件! –

+0

这可以帮助..? http://stackoverflow.com/questions/18787653/invoke-action-method-on-click-of-hselectonemenu – chaeschuechli

+0

链接的文章建议使用valueChangedListener ...因此它已经交给了bean。我想在客户端阻止它,如果用户取消,请在下拉框中保留旧值。 –

相关问题