2013-06-28 48 views
0

使用的jqGrid 4.5.2 &試圖把根據需要一個下拉框或按鈕(取決於在該行的數據的值)在結合下拉或按鈕。我將這個下拉框的內容存儲在頁面&中的一個變量中,並將其分配給一個自定義的格式化程序。下拉框如下:的jqGrid - 每一行

<select id="rlist" class="choices" name="rlist"> 
<option value="0" disabled="disabled" selected="selected">Select Message</option> 
<option value="7">Message2</option> 
<option value="8">Message3</option> 
<option value="9">Message4</option> 
<option value="10">Message5</option> 
</select> 

該按鈕的代碼是:

"<input name='reviewedBtn' class='cbox' style='height:90%;width:60%' type='submit' value='Reviewed' />"; 

我檢索了以下數據XML格式&中的jqGrid顯示它。

<Rowset> 
<Row> 
<msgTxt>Test Message3</msgTxt> 
<SendTime>2013-06-18T15:05:59</SendTime> 
<pID>4</pID> 
</Row> 
<Row> 
<msgTxt>Test Message2</msgTxt> 
<SendTime>2013-06-18T13:01:46</SendTime> 
<pID>4</pID> 
</Row> 
<Row> 
<msgTxt>Test Message1</msgTxt> 
<SendTime>2013-06-18T09:22:49</SendTime> 
<pID>3</pID> 
</Row> 
<Row> 
<msgTxt>Test Message0</msgTxt> 
<SendTime>2013-06-18T08:59:38</SendTime> 
<pID>1</pID> 
</Row> 
</Rowset> 

的的jqGrid本身將只具有字段msgTxt和顯示SendTimepID是一個隱藏的字段)。網格中會有第三列,用於下拉/提交按鈕。對於pID = 4的行,這些行應在每個行上顯示下拉框。 pID = 3的行應該顯示一個submit按鈕。 pID = 1應該沒有顯示在第3列中。以下是我的colModel的簡化版本。

colModel:[ 
    {name:"SendTime",index:"SendTime",width:col1width,align:"center",formatter:"date",formatoptions: {"srcformat":"ISO8601Long", "newformat":"Y-m-d H:i:s"},xmlmap:"Rowset>Row>SendTime",sortable:false}, 
    {name:"msgTxt",index:"msgTxt",width:col2width,align:"left",xmlmap:"Rowset>Row>msgTxt",sortable:false}, 
    {name:"action", 
     width:col3width, 
     align:"center", 
     title:false, 
     formatter: function(cellvalue, options, rowObject) { 
       var pri = $(rowObject).find("pID").text(); 
       if (pri === "4") { 
        return msgSelect; 
        } 
       if (pri === "3") { 
        return "<input name='reviewedBtn' class='cbox' style='height:90%;width:60%' type='submit' value='Reviewed' />"; 
        } 
       else { 
        return "" 
        } 
       } 
     }, 
    {name:"pID",index:"pID",width:col4width,align:"left",xmlmap:"Rowset>Row>pID",sortable:false, hidden:true} 
    ], 

我在beforeSelectRow套住開放&下拉框的變化下面的代碼。

beforeSelectRow: function(id, e) { 
    var $self = $("#myGrid"); 
    var $td = $(e.target).closest("td"); 
    var iCol = $.jgrid.getCellIndex($td[0]); 
    var name = $(e.target).attr("name"); 
    if (this.p.colModel[iCol].name === "action") { 
     if (name === "rlist") { 
      selected = $(this).val(); 
      console.log("responselist open); 
     $("#rlist").change(function(){ 
       var ritem = $(this[this.selectedIndex]).val(); 
       var ritemtext = $(this[this.selectedIndex]).text(); 
       console.log("response list changed " + ritemtext + " id = " + id); 

       return false; 
       });// response list changed 
      return false; 
     } // if rlist 
     if (name === "reviewedBtn") { 
      console.log("reviewedBtn clicked"); 
      return false; 
      } // if reviewedBtn selected 
    } // if Action Column 
    return false; 
}, // beforeSelectRow 

在上面的數據例如,對於行1,下拉功能,因爲它應該 - I檢測下拉的開口和它的變化。不過,如果我打開下拉上行2,它檢測到的下拉開口,但從來沒有在下拉菜單中更改事件一旦做出選擇。 (注:我刪除了一些代碼,刷新電網中以簡化我發佈的代碼然而,當我有console.log報表在哪裏,我跟蹤了什麼是應該發生。)。

所有的jqGrid的例子我已經看到了迄今爲​​止對付編輯的數據,這我沒有做。我相信我在自定義格式化程序中做錯了什麼,但我不知道是什麼。我很感激任何幫助或建議如何解決這個問題或我如何解決這個問題。

謝謝!

回答

0

我結束了由最後搞清楚,有沒有什麼不對的自定義格式&它在做什麼解決我自己的問題。我調整了beforeSelectRow如下:

beforeSelectRow: function(id, e) { 
    var $self = $("#myGrid"); 
    var $td = $(e.target).closest("td"); 
    var iCol = $.jgrid.getCellIndex($td[0]); 
    var name = $(e.target).attr("name"); 

    if (name === "reviewedBtn") { 
     console.log("reviewedBtn clicked"); 
     return false; 
     } // if reviewedBtn selected 

    if (($(e.target).val() !== null) && ($(e.target).val() !== "Reviewed")) { 
    var ritem = $(e.target).val(); 
    var ritemtext = $(e.target).text(); 
    console.log("response list changed " + ritemtext + " id = " + id); 
    return false; 
     }  


    if (this.p.colModel[iCol].name === "action") { 
     if (name === "rlist") { 
      selected = $(this).val(); 
      console.log("responselist open); 
      return false; 
     } // if rlist 
    } // if Action Column 
    return false; 
}, // beforeSelectRow 

我需要確定何時responselist是開放的(I,使用它停止的時間間隔,這是爲了簡化起見這裏省略)&然後將捕獲要麼被點擊的按鈕時或者下拉菜單有選擇。上述

的代碼是能夠做到這一點。