본문 바로가기

대외활동/TNS Internship

100210 TNS Korea Internship (42/53)

728x90

예정대로 오늘은 3DGrid Validation에 대해!
각 순위에 똑같은 응답을 했을 경우, ErrorMessage를 출력해주는 validation code를 만들 생각이다.
사실 TNS KR WI Library의 <dg>를 사용하면 이 사태를 예방할 수 있다.
그렇지만 IE를 제외한 오픈브라우져에서 CAWI Checker등의 프로그램을 사용해서 체크할 경우 막을 수 없어서
또다른 script를 필요로하게 된다.

그래서 간단히 만들어보았다.

사용자 삽입 이미지

사실 이런형태는 오히려 쉽다.
내가 기존에 썼던 방법.
하나의 값을 저장해 두고, 다음 값과의 차이를 비교하는 방식으로도 충분히 걸러낼 수 있는 형태였다.

사용자 삽입 이미지

오히려 어려운 쪽은 이쪽이다
function을 이렇게 정의하고

function Check3DVal(qSet)
{
   var allQIDArr = qSet.members();
   ShowAlert(allQIDArr)
}

그리고 validation 탭에

var qSet = set('suc_1st','suc_2nd','suc_3rd')
Check3DVal(qSet)

이렇게 넣으면
ShowAlert가 순서대로 값을 돌려주어야 하는데,
이상하게도...

사용자 삽입 이미지

이렇게 3, 1, 2의 순서대로 들어간다.
이쯤에서 궁금증이 생겼다.
그래서 6개로 늘려보기로 했다.

사용자 삽입 이미지

4,6,3,1,2,5의 순서로 들어간다.
이건..뭐..무작위군.
결국 이렇게 무작위로 저장되게 되면 바로 앞 항목과의 차이만 비교하는 첫번째 방법으로는 잡아내지 못하고
그대로 통과시켜버리는 불상사가 발생하게 된다.

그래서 고민하다가 두번째 방법을 생각해냈다.
배열을 하나 만들고,
그 배열안에 3DGrid안쪽 각각의 질문들의 answer precode를 저장한다.
그리고 검색 알고리즘 (말이 알고리즘이지, 가장 단순한 search) 을 통해
중복된 대답을 찾고 에러메시지를 반환.

그렇게해서 잘 동작하는 스크립트를 만들었다.
codes are below

function Check3DVal(qSet)
{
   var allQIDArr = qSet.members();
   var previousValue = 0;
   var currentValue;
   var currentValues = new Array();

   for(var i=0;i<allQIDArr.length;i++)
   {
        currentValue = f(allQIDArr[i]) // 우선 하나씩 precode값을 currentvalue에 넣는다.
        currentValue = parseInt(currentValue, 10)
        currentValues[i] = currentValue // 그리고 그걸 배열에 차례대로 넣는다.
            
   }

   for (var j=0;j<currentValues.length;j++) // 그 배열의 길이동안
    {
        for (var k=(j+1);k<currentValues.length;k++)
        {
               if (currentValues[j] == currentValues[k])
               {
                    RaiseError();
                    SetErrorMessage(LangIDs.ko,ErrorTemplate("각 순위에는 다른 값을 선택해 주세요."));
               }    
        }
   }
}


적용법은

사용자 삽입 이미지

3DGrid의 경우, 통상적으로 validation은 맨 마지막 문항에 넣어준다.
이 경우 suc_6th에 넣어주면 되겠다.

var qSet = set('suc_1st','suc_2nd','suc_3rd','suc_4th','suc_5th','suc_6th' )
Check3DVal(qSet)

나는 qSet이라는 set을 만들어서 그 안에 해당하는 문항들을 넣었다.
그리고 그 qSet을 parameter로 함수에 전달하기만하면 된다.
결과.

사용자 삽입 이미지


728x90