Hallo,
ich hab hier ein merkwürdiges Problem.
In einer XPage gibt es mehrere bearbeitbare Testfelder (Beispiel siehe unten).
Kurze Erklärung:
- Wenn im Feld Text verändert wird (onInput), soll sofort ein Kennzeichen (Icon) ausgeblendet werden
- Wenn das Feld verlassen wird (onChange), soll in Abhängigkeit vom Inhalt die CSS-Klasse geändert werden (Darstellung Pflichtfelder)
Bitte jetzt nicht nach Sinnhaftigkeit o.ä. fragen. Der Kunde braucht das genau so.
Grundsätzlich funktioniert das Ganze sehr gut.
Allerdings kommt es vor, dass während der Eingabe das Feld (und auch alle anderen Textfelder in der XPage) geleert werden.
Nach drücken der F5-Taste tauchen die Inhalte dann (meistens) wieder auf.
Hat jemand eine Idee?
Der Fehler tritt bei manchen Usern verstärkt auf, mein manchen nie (bei identischen Browsern).
Auch mit aktiviertem bzw deaktiviertem Cache wurde getestet.
Vielen Dank & Viele Grüße
Marcus
<xp:inputText
id="Strasse_1"
tabindex="1">
<xp:eventHandler
event="oninput"
submit="true"
refreshMode="partial"
refreshId="Adresse_OK_1"
id="eventHandler21">
<xp:this.action>
<![CDATA[#{javascript:getComponent("Adresse_OK_1").setRendered(false)}]]>
</xp:this.action>
</xp:eventHandler>
<xp:this.styleClass>
<![CDATA[#{javascript:return fieldValidate(this);}]]>
</xp:this.styleClass>
<xp:eventHandler
event="onblur"
submit="true"
refreshMode="partial"
refreshId="Strasse_1"
id="eventHandler47">
</xp:eventHandler>
</xp:inputText>
XPage Properties:
xsp.ajax.renderwholetree=false
xsp.client.script.radioCheckbox.ie.onchange.trigger=early-onclick
xsp.error.page.default=true
xsp.library.depends=com.ibm.xsp.extlib.library,org.openntf.xsp.bootstrap.library,com.ibm.xsp.extlib.relational.library
xsp.persistence.mode=basic
xsp.resources.aggregate=true
xsp.theme=oneuiv2.1
xsp.session.timeout=120
xsp.partial.update.timeout=120
Das Problem ist nur, dass ich an einer anderen Stelle im SSJS wissen muss ob sich was geändert hat, sprich ob Icon ein bzw. ausgeblendet ist.
Ohne das "große Ganze" zu kennen kann man da leider nur schwer weiterhelfen. Sobald SSJS im Spiel wäre, werden die Formulardaten ja eh übertragen und kannst dir den Feldwert holen.
... allerdings hab ich dann das Problem das der User, wenn er das Feld verlässt um beispielsweise einen Button anzuklicken, den Button 2 mal anklicken muss, damit der dort hinterlegte Code ausgeführt wird
Klingt nach dem Problem mit 2 parallelen Ajax-Calls gegen die XPage. Das geht nie gut. Gleichzeitig das Icon aktualisieren und den Button ausführen. Das ist ein Wettrennen... Firebug (etc.) würde das gut verdeutlichen..
...<![CDATA[#{javascript:getComponent("Adresse_OK_1").setRendered(false)}]]>...
Was passiert eig. wenn das Feld erst leer ist... du "123" eingibst, und es dannach wieder löscht. Wird das Icon dann wieder eingeblendet?