2011-02-15 10 views
1

나는 다음과 같은 문제가에 의해로드 드롭 다운을 사용하지 않도록 설정합니다. 양식 편집 (또는 추가)을 클릭하면 드롭 다운이 정상이지만 행이 이미있는 경우 비활성화해야합니다. afterShowForm 이벤트를 사용하여이 이벤트가 표시되는 것은 드롭 다운이 이미 채워진 경우에만 작동한다는 것입니다. 처음에는 afterShowForm이 실행되어 드롭 다운이 dataUrl으로 채워진 것 같습니다.있는 jqGrid는 dataUrl

이 문제를 어떻게 해결할 수 있습니까?

답변

3

드롭 다운을 사용하지 않도록 설정하는 가장 간단한 방법은 buildSelect 이벤트를 dataUrl에 추가로 editoptions에 사용하는 것입니다. dataUrl에 의해 반환 된 데이터가 이미 올바른 양식이있는 경우 buildSelect는 다시 입력 매개 변수를 반환 할 수 있습니다, 그러나 사람은 추가로

당신은 모든 콜백은 항상 호출됩니다 있는지 확인하기 위해 양식 recreateForm:true를 사용해야 해제 할 수 있습니다. 코드 스키마는 다음과 같을 수 있습니다.

var needDisable=true; 
$("#list").jqGrid({ 
    colModel:[ 
     {name:'myDropDown',editable: true,edittype:"select", 
     editoptions:{dataUrl:'myDropDown.txt', 
         buildSelect: function(data) { 
          var field_id=this.id; // "myDropDown" 
          setTimeout(function(){ 
           if (needDisable) { 
            $('#tr_'+field_id).attr('disabled','disabled'); 
           } else { 
            $('#tr_'+field_id).removeAttr('disabled'); 
           } 
          }, 100); 
          return data; 
         } 
     }, 
     // ... other colModel columns 
    ], 
    // ... other jqGrid parameters 
}).jqGrid('navGrid','#pager',{}, 
      { // Edit form parameters 
       recreateForm:true, 
       beforeShowForm:function(form){ 
        needDisable=true; 
       } 
      }, 
      { // Add form parameters 
       recreateForm:true, 
       beforeShowForm:function(form){ 
        needDisable=false; 
       } 
      }); 
+0

@Angelinux :

내 솔루션은 자바 스크립트에서 재귀와의 setTimeout의 조합으로 당신을 환영합니다! 15 포인트의 평판에서 시작하여 도움이되는 질문이나 답변을 투표 할 권한이 있습니다 (자세한 내용은 http://stackoverflow.com/faq#howtoask 참조). 이 기능을 사용하면 다른 사람들이 stackoverflow에 대한 정보를보다 효과적으로 검색 할 수 있습니다. – Oleg

0

이 목록 문제에 대한 해결책도 마련해야합니다. 행을 추가 할 때 기존 값 목록을 표시하고 필요한 경우 새 값을 추가 할 수있는 텍스트 필드가 있습니다 (내 버전의 콤보 상자). 행을 편집 할 때 목록 대신 텍스트 필드에 값을 표시하고 '추가'필드를 제거하려고합니다. 또한 행이 존재하면 값을 편집 할 수 없습니다.

내 솔루션 : 각각 beforeEdit : beforeAdd 및 beforeInitData :

navigatorAddOptions 및 navigatorEditOptions이 beforeInitData를 사용합니다. beforeShowForm이 작동하지 않습니다. 둘 다 recreateForm : true도 사용합니다.

전에 ... 함수 :

function beforeAdd(formid) { 
    $("#gridTable").jqGrid('setColProp','listfield',{edittype:'select',editoptions:{readonly:false,dataUrl:'url_to_list.action'}}); 
    $("#gridTable").jqGrid('setColProp','newvaluefield',{hidden:false}); 
}; 

function beforeEdit(formid) { 
    $("#gridTable").jqGrid('setColProp','listfield',{edittype:'text',editoptions:{readonly:true}}); 
    $("#gridTable").jqGrid('setColProp','newvaluefield',{hidden:true}); 
}; 
0

가 // 방법 : 선택 툴바 숨기기 드롭
// $ ("#"+ COLUMNNAMES [I]) .hide(); 당신이 이름을 가진 열 이름 pid 인 경우

0

, 여기

이 편집에서

beforeShowForm:function(form) 
    $("#tr_pid").find("input,button,textarea,select").attr("disabled",true); 
} 

에서 나를 위해 답변을

beforeShowForm:function(form){ 
    $("#tr_pid").find("input,button,textarea,select").attr("disabled",false); 
} 
0

를 추가하려면이 방법으로 그것을하지 않았다 있어요 또는 너무 복잡했다. 내 경우

나는 내 드롭 다운 이렇게 항목을로드 할 dataURL을 사용했다

(....하지만 다른 기준을 사용할 수 있습니다) 존재합니다. 선택된 값을 가지고 특정 드롭 다운을 기다리는 원 화면에서 사용할 수있게되기까지 언젠가 걸렸습니다.

편집/추가 양식이 처음으로 에로드 될 때까지 컨트롤이로드 될 때까지 기다리는 방법에 대해 Google 검색에서 토지가 표시되는 경우 ....나는이 같은 그리드에 매여

function WaitForDropDownToBeLoadedAndProcess() { 

    var dropDownVal= $("#MyDropDown").val(); 

    if (!dropDownVal) {//if the value is undefined called this method recursively 
     setTimeout(function() {//use setTimeout to avoid blocking 

      WaitForDropDownToBeLoadedAndProcess(); 

     }, 150); 

    } else {//if the dropdown has a value 

     //do your logic here... like disabling the control or set value 

    }  
} 

:

afterShowForm:function(formid) { 

    WaitForDropDownToBeLoadedAndProcess(); 
}