2012-09-13 17 views
1

인라인 편집 및 추가 버튼을 사용하여 새 레코드를 만들 때 jqGrid를 사용하고 있습니다. 단순성을 위해서 jqGrid - 필드 유효성 검사

, 나는이 개 분야
Field1 Field2 

이 있다고 내가 필요로하는 다음과 같은 규칙

  • 를 필요한 경우 사용자가 필드 1 또는 필드 2, 아니 검증에 아무 것도 입력하지 않는 경우
  • 사용자가 입력 한 데이터는 Field1 또는 Field2 중 하나만 입력 할 수 있지만 둘 다 입력 할 수는 없습니다.

답변

5

jqGrid의 유효성 검증 가능성에는 인라인 편집 중 유효성 검사와 같은 많은 제한 사항이 있습니다. 유효성 검사를 구현하는 $.jgrid.checkValues 메서드가 호출되고 (소스 코드 the line 참조) 해당 입력 필드를 읽는 동안 직접 호출됩니다. 따라서 현재 유효성 검사로서 다른 필드에 대한 정보가 없습니다.

해결 방법으로 필드 유효성 검사 중에 Field1에서 값을 저장할 수 있습니다. Filed2의 유효성 검사는 두 필드의 유효성 검사를 수행 할 수 있습니다. custom validation은이 경우 사용할 수있는 방법입니다.

var field1, field2, 
    myCustomCheck = function (value, colname) { 
     if (colname === "field1") { 
      field1 = value; 
     } else if (colname === "field2") { 
      field2 = value; 
     } 

     if (field1 !== undefined && field2 !== undefined) { 
      // validate the fields here 
      return [false, "some error text"]; 
     } else { 
      return [true]; 
     } 
    }; 

$("#grid").jqGrid({ 
    ... 
    colModel: [ 
     ... 
     {name: 'field1', editable: true, ..., 
      editrules: {custom: true, custom_func: myCustomCheck}}, 
     ... 
     {name: 'field2', editable: true, ..., 
      editrules: {custom: true, custom_func: myCustomCheck}}, 
     ... 
    ] 
    ... 
}); 

당신은 (oneditfunc, aftersavefunc 또는 다른 콜백) 전이나 편집 이후에 undefined 값으로 field1field2 변수를 재설정하는 것을 잊지 마세요해야한다.

columnChooser을 사용하는 경우 중요 할 수있는 필드 순서가 변경된 경우 코드를 작동시키기 위해 field1field2 유효성 검사의 "대칭"버전을 사용했습니다. 이 경우 field1field2 전에 항상 유효성을 확인할 수 있습니다.

기존 jqGrid 메서드의 "서브 클래 싱"을 사용하여 보관할 수있는 몇 가지 추가 효과가 있습니다. 예를 들어 the answer을 참조하십시오.

업데이트 : The demo 위의 유효성 검사 아이디어가 더욱 자세하게 설명됩니다.

+0

Oleg, 나는 field1, field2에 대해 내 필드를 대체했지만 정의되지 않은 측면에서 field1과 field2의 유효성을 검사하는 의도 된 결과를 제공하지 않았습니다. 당신이 나를 가리킬 수있는 살아있는 예가있을 수 있습니까? –

+0

@NatePet : 필자는'field1'과'field2' 변수를 설정하고 시작하기 전에'undefined'로 재설정 한 [데모] (http://www.ok-soft-gmbh.com/jqGrid/2filedsvalidation.htm)을 만들었습니다 편집 중. 내 대답에서 코드를 업데이트하여보다 명확하게 만들었습니다. – Oleg

+0

대단히 감사합니다. 올렉. 매우 감사! –