2012-04-04 15 views
1

Ich validiere mein Formular mit SSJS von einem Absenden-Button. Um den Fehler für den Benutzer anzuzeigen, verwende ich das Erweiterungsbibliotheksdialogfeld.Setzen Sie den Fokus auf Feld mit SSJS in Xpages?

Wie kann ich mit SSJS den Fokus auf das Feld setzen, wenn die Validierung fehlschlägt?

Eine Sache, die ich möglicherweise tun kann, ist CSJS in der OK-Schaltfläche des Dialogfelds zu verwenden. Ich schließe es mit der OK-Taste wie folgt:

var errorField = '#{javascript:viewScope.get("errorField")}'; 

Ich versuchte Folgendes, aber es scheint nicht zu funktionieren.

Ich setze die Scope-Variable errorField, wenn ich die eigentliche Validierung mache.

+0

Nur als Update. Ich habe einen Alert innerhalb des obigen if-Blocks hinzugefügt, der den Wert der Scope-Variablen anzeigt und den richtigen Wert anzeigt. Es ist also nur der Fokus, der nicht funktioniert. –

Antwort

3

Ja meine schlechte auf den fehlenden Doppelpunkt. Ok, habe es ausprobiert und es scheint auch nicht zu funktionieren, wenn ich den ID-Ausdruck aufbruche.

Sie haben eine viewScope auf die ID des Fehlerfeldes gesetzt, ist es Ihnen möglich, dass auf:

getComponent('...').getClientId(); 

wenn Sie tun können, dass die Sie ausführen wäre in der Lage:

var errorField = '#{javascript:viewScope.get("errorField")}'; 

var ef = dojo.byId(errorField); 
ef.focus(); 

das funktioniert gut für mich.

+0

Das scheint nicht für mich zu arbeiten. Meinst du wirklich getComponent ('...'). GetClientId(); ? getComponent hat keine solche Methode. Also habe ich versucht getClientId ('Field1'); und ich tat dies, als ich das viewScope in meinem SSJS einstellte. Was vermisse ich? –

+0

Ich habe diesen Kommentar jetzt erst gesehen. Ja, ich habe getComponent(). GetClientId() zuvor verwendet. Wurde im Skript-Editor automatisch vervollständigt. Die folgende Website zeigt Beispiele für die Verwendung von getClientId ('Name'). http://www-10.lotus.com/ldd/ddwiki.nsf/dx/element_ids_in_client_side_javascript_on_xpages.htm –

+0

Jetzt arbeiten. Ich bin mir nicht sicher, was ich vorher falsch gemacht habe. Danke für die Lösung. –

3

versuchen Sie es mit:

var ef = dojo.byId('#{id'+errorField+'}'); 
ef.focus(); 

getElementsByName für mehrere Elemente mit dem Namen suchen = "..." und gibt ein Array. Sie können den Fokus nicht auf ein Array von Steuerelementen festlegen.

wo wie in XPages alle Kontrollen einzigartigen IDs haben, so Dojo mit für ids ein einzelnes Element zurückkehren

+0

Danke Simon. Nach dem Hinzufügen eines: (Doppelpunkt) nach der ID, um es zu kompilieren, habe ich das versucht, aber es hat nicht funktioniert. Ich habe sogar eine zusätzliche Schaltfläche direkt mit meinem xPage mit demselben Code hinzugefügt, um sicherzustellen, dass es kein seltsames Problem mit dem Erweiterungsbibliotheksdialog und meiner OK-Schaltfläche war. –

+0

FYI Die vollständige Client-ID für dieses Steuerelement lautet: view: _id1: _id10: _id11: _id12: ccATM1: radioGroupCMBUAction. Nicht sicher, wie ich das in meinen Fokus bringen würde. –

+0

Simons Lösung sollte funktionieren. Haben Sie versucht, den obigen Code zu debuggen (indem Sie einen Unterbrechungspunkt mit Firebug setzen), um zu überprüfen, ob der Code ausgeführt wird und die richtige ID hat? –

1

Versuchen Sie finden den Fokus nach der teilweisen einzustellen (oder voll) zu aktualisieren ist getan.

 <xp:eventHandler event="onClientLoad" submit="false"> 
     <xp:this.script><![CDATA[ var ef = dojo.byId('#{javascript:getClientId(viewScope.get("errorField"))}'); 
        ef.focus();]]></xp:this.script> 
    </xp:eventHandler> 
Verwandte Themen