2012-04-04 30 views
1

送信ボタンからSSJSを使用してフォームを検証しています。ユーザーにエラーを表示するには、拡張ライブラリダイアログボックスを使用しています。XpagesでSSJSを使用してフィールドにフォーカスを設定しますか?

SSJSを使用して、検証に失敗したフィールドにフォーカスを設定するにはどうすればよいですか?

私ができることの1つは、ダイアログボックスの[OK]ボタンでCSJSを使用することです。次のように私はOKボタンで閉じます。

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

は、私は次のことを試してみましたが、動作するようには思えません。

if (errorField != null && errorField != "") 
{ 
var ef = document.getElementsByName("#{id:" + errorField + "}"); 
ef.focus(); 

} 

私は実際の検証を行う際にスコープ変数errorFieldを設定しています。 "..." =

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

getElementsByNameが名前を持つ複数の要素を探しているし、配列を返す:

+0

アップデートと同様です。スコープ変数の値を表示するifブロック内に警告を追加し、適切な値を表示します。だから、それは働かないだけの焦点です。 –

答えて

3

はい私の悪いです。 OKはそれを試してみました。私がid式を解読しても、それは私のために働いていないようです。あなたが実行できるようになることを行うことができれば

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

:あなたはviewScopeはエラーフィールドのIDに設定されている

は、それが可能あなたがそれを設定するためのものです

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

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

私にとってうまくいきます。

+0

これは私のために働いていないようです。あなたは本当にgetComponent( '...')を意味しましたか?getClientId(); ? getComponentにはそのようなメソッドはありません。だから、私はgetClientId( 'Field1')を試しました。私はSSJSでviewScopeを設定するときにこれを行いました。私は何が欠けていますか? –

+0

今このコメントを見ました。はい、前にgetComponent()。getClientId()を使用しました。スクリプトエディタで自動的に完了しました。以下のWebサイトは、getClientId( 'name')の使用例を示しています。 http://www-10.lotus.com/ldd/ddwiki.nsf/dx/element_ids_in_client_side_javascript_on_xpages.htm –

+0

現在作業中です。以前私が何をやっていたのか分からない。ソリューションに感謝します。 –

3

を使用してみてください。コントロールの配列にフォーカスを設定することはできません。そうIDSを検索するために道場を使用して、部分的(または完全な)の後にフォーカスを設定するようにしてください単一の要素

+0

ありがとうサイモン。コンパイルするためにidの後に:(コロン)を追加した後、私はこれを試みましたが、うまくいきませんでした。私は同じコードを使ってxPageに追加のボタンを追加して、拡張ライブラリダイアログとOKボタンで何か変わった問題ではないことを確認しました。 –

+0

FYIこのコントロールの完全なクライアントIDは、view:_id1:_id10:_id11:_id12:ccATM1:radioGroupCMBUActionです。それを私の焦点にどのように働かせるかわからない。 –

+0

Simonのソリューションがうまくいくはずです。上記のコードをデバッグしようとしましたか(Firebugを使用してブレークポイントを設定する)、コードが実行され、正しいIDを持っているかどうかを確認しましたか? –

1

を返します

のXPagesのようにすべてのコントロールが固有のIDを持っている

、リフレッシュが行われます。行方不明コロンの

 <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> 
関連する問題