2012-04-04 2 views
1

제출 버튼에서 SSJS를 사용하여 양식을 확인하고 있습니다. 사용자에게 오류를 표시하려면 확장 라이브러리 대화 상자를 사용하고 있습니다.Xpages에서 SSJS를 사용하여 필드에 포커스를 설정 하시겠습니까?

어떻게 SSJS를 사용하여 유효성 검사에 실패한 필드에 포커스를 설정할 수 있습니까?

내가 할 수있는 한 가지 방법은 대화 상자의 확인 버튼에 CSJS를 사용하는 것입니다. 다음과 같이 확인 버튼을 사용하여 닫습니다.

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

예 결장이 잘못되었습니다. 좋아, 그것을 시도하고 나도 id 식을 분해 할 때 나를 위해 일하는 것 같지 않습니다. 이 부분을 설정하는 오류 필드의 ID로 설정 viewScope이

, 그것은 가능하다에 :

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

당신은 당신이 실행할 수있을 것이라고 할 수있는 경우 :

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

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

나를 위해 잘 작동합니다.

+0

이것은 나를 위해 작동하지 않는 것 같습니다. 정말 getComponent ('...')를 의미 했습니까? getClientId(); ? getComponent에는 그러한 메소드가 없습니다. 그래서 getClientId ('Field1'); 내 SSJS에서 viewScope을 설정할 때이 작업을 수행했습니다. 내가 뭘 놓치고 있니? –

+0

이 댓글 만 보았습니다. 예 이전에 getComponent(). getClientId()를 사용했습니다. 스크립트 편집기에서 자동 완료되었습니다. 아래 웹 사이트에서는 getClientId ('name') 사용 예제를 보여줍니다. http://www-10.lotus.com/ldd/ddwiki.nsf/dx/element_ids_in_client_side_javascript_on_xpages.htm –

+0

현재 작업 중입니다. 전에 내가 뭘 잘못했는지 모르겠다. 솔루션을 가져 주셔서 감사합니다. –

3

을 사용해보십시오. 컨트롤 배열에 포커스를 설정할 수 없습니다. XPages에서 모든 컨트롤이 너무 ID를 하나의 요소를 부분 (또는 전체) 이후에 포커스를 설정하는

+0

감사합니다. Simon. id 다음에 :(콜론)을 추가하여 컴파일하려고 시도했지만 시도했지만 작동하지 않았습니다. 심지어 확장 라이브러리 대화 상자와 내 확인 버튼에 이상한 문제가 아닌지 확인하기 위해 같은 코드로 내 xPage에 추가 버튼을 추가했습니다. –

+0

FYI이 컨트롤의 전체 클라이언트 ID는 view : _id1 : _id10 : _id11 : _id12 : ccATM1 : radioGroupCMBUAction입니다. 내 초점에 어떻게 그것을 작동 시킬지 모르겠다. –

+0

Simon의 솔루션이 효과적입니다. 위의 코드 (Firebug를 사용하여 중단 점 설정)를 디버그하여 코드가 실행되고 올바른 ID를 가지고 있는지 확인하려고 했습니까? –

1

시도를 반환합니다 검색 할 도장을 사용하여, 고유 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> 
관련 문제