Ich benutze PrimeFaces 5.0 (kann aufgrund anderer Probleme nicht aktualisiert werden). Ich habe ein SelectOneMenu. Ich habe ein onchange-Ereignis an es gebunden, so dass, wenn der Benutzer es ändert, ich mit confirm() den Benutzer auffordern kann, die Aktion zu bestätigen. Wenn der Benutzer auf Nein klickt, muss ich den alten Wert zurückgeben.Wie können Sie während eines Onchange-Ereignisses den Wert und den angezeigten Wert von PrimeFaces SelectOneMenu über JavaScript ändern?
Das Menü sieht wie folgt aus:
<p:selectOneMenu
id="referenceTable"
widgetVar="referenceTable"
style="width:45%"
value="#{maintRefTabUi.selectedReferenceTable}"
onchange="changeReferenceTableDropdown();"
>
...snip...
Die Funktion sieht wie folgt aus: Brennen zweimal
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();
}
}
Ich bin unfähig, etwas in Bezug auf .selectValue() und onchange() Ereignis zu finden. Da JavaScript-Einstellung .value nicht onchange() ausgelöst wird, kann .selectValue() fire onchange() einen Fehler enthalten.
Gibt es eine Möglichkeit, onchange() zu unterdrücken? Ich habe auch onchangechange = null versucht; und legte es danach zurück, aber es hat nicht funktioniert (onchange wird immer noch gefeuert).
Oder gibt es eine Möglichkeit, SelectOneMenu seine Anzeige entsprechend .value zu aktualisieren?
Ich versuchte es; Bei Verwendung des Bestätigungsdialogs tritt dasselbe Problem auf, dass das SelectOneMenu den neuen Wert verwendet, selbst wenn der Benutzer den Vorgang abgebrochen hat. Es ist das Ereignis onchange(), daher wird die Änderung bereits auf dem clientseitigen SelectOneMenu angewendet. Wenn ich nur ein Onclick-Event auf dem SelectOneMenu! –
Könnte dies helfen ..? http://stackoverflow.com/questions/18787653/invoke-action-method-on-click-of-hselectonemenu – chaeschuechli
Der verlinkte Artikel empfiehlt die Verwendung eines ValueChangedListener ... so ist es bereits an die Bohne übergeben. Ich möchte es auf der Clientseite blockieren und wenn der Benutzer abgebrochen wird, den alten Wert in der Dropdown-Box beibehalten. –