2015-01-19 3 views
0

셀의 jQgrid 행을 인라인으로 업데이트하려고합니다. 아약스를 사용하여 매개 변수를 보냅니다. id 값을 얻을 수 있지만 Status 열에서 셀 값을 가져 오는 데 어려움이 있습니다. 아래 코드는 작동하지 않는 것 같습니다. 매개 변수를 보낼 아약스 직접 선택한 셀 (확인란 아직 쇼)에서 클릭 후 발견JQGRID가 아약스 매개 변수의 셀 값을 가져올 수 없습니다.

var rowData = jQuery("#list").getRowData(id); 
var colData = rowData.Status; 

아래의 대답을 사용하지만 할

id:50831 
Status: 
action:cekmark 

시도 :

{name:'Status', index:'Status', width:50,search:true,align : 'center', 
editable: true,edittype:"checkbox",editoptions: {value:"OK:"}, 
stype:'text',searchoption:{sopt:['cn']}} 

loadComplete: function() { 
    var iCol = getColumnIndexByName($(this),'Status'),rows = this.rows,i,c = rows.length; 
    for (i = 1; i < c; i += 1) { 
     $(rows[i].cells[iCol]).click(function (e) { 
     var id = $(e.target).closest('tr')[0].id,isChecked = $(e.target).is(':checked'); 
     var rowData = jQuery("#list").getRowData(id); 
     var colData = rowData['Status'];  

     $.ajax({ 
       type : "POST", 
       url : "process1.php", 
       async : false, 
       cache : false, 
       data : "id="+id+"&Status="+colData+"&action=cekmark", 
       success: function() { 
        $("#list").trigger("reloadGrid"); 
        return this; 
        } 
       }); 
      return false; 
      }); 
     } 
    } 

아약스 결과입니다 왜?


답변 나는 내 경우에 적합 일부 스크립트 변경 올렉의 답변에 따라

: 당신이 jQuery("#list").getRowData(id)['Status']을 사용하는 이유

onCellSelect: function() { 
    var iCol = getColumnIndexByName($(this),'Status'),rows = this.rows,i,c = rows.length; 
    for (i = 1; i < c; i += 1) { 
     $(rows[i].cells[iCol]).click(function (e) { 
      var id = $(e.target).closest('tr')[0].id,isChecked = $(e.target).is(':checked'); 
      var isChecked = isChecked? "OK" : ""; 
      $.ajax({ 
      type : "POST", 
      url : "process1.php", 
      async : false, 
      cache : false, 
      data : "id="+id+"&Status="+isChecked+"&action=cekmark", 
      success: function() { 
       $("#list").setGridParam({datatype:'json', page:1}).trigger('reloadGrid'); //this make your grid reloaded without reload page 
       //$("#list").trigger("reloadGrid"); 
       return this; 
       } 
      }); 
     return false; 
     }); 
     } 
    } 
+0

서버에서 상태를 반환 하시겠습니까 ?? 서버에서 돌아 오는 json의 "상태"키에 아무 것도 지정하지 않았습니까? – Krishna

+0

@Krishna 상태 값은 "OK"입니다. 두 번째 방법을 시도하지만 값이 false이면 Ajax가 잘못된 데이터를 보냅니다. – nunu

+0

"상태"키에 부울 값을 지정해야한다고 생각합니다! ajax 요청을 작성하는 서버 코드를 게시 할 수 있습니까? @nunu – Krishna

답변

0

잘 모르겠어요합니다. isChecked 값은 필요한 결과를 얻습니다. 그래서, 당신은 단지

data: "id="+id+"&Status="+isChecked+"&action=cekmark", 

또는 이벤트를보다 효율적으로 사용할 수

data: {id: id, Status: isChecked, action: "cekmark" }, 

하나 더 조언을 주요 문제를 해결합니다. click 이벤트 핸들러를 loadComplete 안에 등록하십시오. <input type="checkbox" ...>은 모두 자신의 click 이벤트 핸들러를 가져옵니다. 그리드 전 체에 jqGrid가 등록한 기존의click 핸들러를 사용하는 것이 좋습니다. 핸들을 사용하는 경우 beforeSelectRow라고합니다. The answer은 필요한 모든 항목에 매우 근접한 the demo을 제공합니다. 작은 수정을하고 $.ajax 호출을 포함 시켜서 확인란 상태 변경에 대해 서버에 알립니다.

+0

나는 포맷터를 제거하려고하는데, 필자의 경우 기본 체크 박스 편집이 필요하다. 사용 후 귀하의 대답을 발견 한 (단일) 클릭 후 아무 것도 (확인란 표시 안 함).하지만 두 번 클릭 (확인란 여전히 표시되지 않음) 아약스는'상태 : false'와 서버에 보낼 발견했다. – nunu

+0

@nunu : 죄송하지만, 무슨 뜻인지 이해가 안됩니다. id = "+ id +"& Status = "+ colData +"& action = cekmark "'대신에 'data :"id = "+ id +"& Status = "+ isChecked +"& action = cekmark " 모든? 상태를 변경하는 중 일부 작업 (로컬 편집을 구현)을 수행하는 [데모] (http://stackoverflow.com/a/24239416/315935)를 시도 했습니까? ''edittype : "체크 박스"''를 사용하고''포맷터 : ''를 사용하지 않아도됩니까? 'loadComplete'는 포맷터가 그리드를 채운 후에 만 ​​실행될 것이지만 편집중인 행이 없으므로'$ (rows [i] .cells [iCol]). click (.)'코드는 작동하지 않습니다. – Oleg

+0

나는 매개 변수가 보낼 수있는'colData into isChecked'를 변경하려고 시도했다.그렇다면'isChecked'의 값이 무엇인지 알고 싶습니다.'alert (isChecked);를 호출하면 isChecked 값이'OK'가 아닌'true'가됩니다. 왜? – nunu

관련 문제