2011-06-27 51 views
2

我有一個帶有edittype的JQGrid列:'選擇'使用dataUrl返回不同賬戶組的賬戶列表。JQGrid Edittype:'select'using dataurl返回<select>與<optgroup>不存儲選擇值

我的問題:保存行時,沒有值傳遞給我的Select列的editurl。如果我刪除的值傳遞給我的選擇列editurl。

描述:對於我的列數據,我返回的是帳戶名稱,而不是值,所以當網格加載時顯示名稱。

當編輯一行(聯機編輯)時,調用dataUrl並顯示選擇列表,併爲行數據選擇我的Account。

然後我從選擇列表中選擇一個新帳戶,然後按回車保存。所選的帳戶值不會傳遞給該列的editurl函數。如果我從帳戶值中刪除's傳遞給editurl函數。

我不知道如果我做錯事,即不設置電網參數,

希望你能幫助我。

由於提前,

克里斯

我的網格代碼:

{"total":1, 
"page":1, 
"records":6, 
"rows":[ 
    {"id":165,"cell":["165","249","125","DM000249","1500.00","Sales"]}, 
    {"id":145,"cell":["145","229","105","SM000229","100.00","Rent"]}, 
    {"id":153,"cell":["153","237","113","SM000237","38.07","Bank Fees"]}, 
    {"id":185,"cell":["185","269","145","SM000269","750.00","Cash Discounts"]}, 
    {"id":194,"cell":["194","278","154","SM000278","13.29","Rent"]}, 
    {"id":211,"cell":["211","295","171","SM000295","100.00","Rent"]}] 
} 

的輸出/下拉/ CategorySelectList

/下拉/的GridData的輸出

<select> 
<optgroup label='Expenses'> 
<option value='42'>Accounting Fees</option> 
<option value='60'>Bank Fees</option> 
<option value='23'>Bank Service Charges</option> 
<option value='24'>Books and Publications</option> 
<option value='25'>Cash Discounts</option> 
<option value='43'>Rent</option> 
</optgroup> 
<optgroup label='Income'> 
<option value='19'>Sales</option> 
<option value='20'>Services</option> 
<option value='21'>Interest Income</option> 
<option value='22'>Other Income</option> 
</optgroup> 
</select> 
+0

你可以修改你的問題,並附上'/ DropDown/CategorySelectList'和'/ DropDown/GridData /'的輸出。有數據可以嘗試重現您的問題。 – Oleg

+0

感謝Oleg,我已經用請求的輸出更新了問題。第一次應該這樣做,我的不好。 –

回答

5

當前版本的jqGrid不適用於<optgroup>內部的<select>

enter image description here

我發現的<optgroup>的使用可以在某些情況下是有益的。所以我調試的代碼的jqGrid一點,並發現了一個需要從

tmp[nm] = $("select>option:selected",this).val(); 
tmp2[nm] = $("select>option:selected", this).text(); 
只有兩個jqGrid的代碼行(行的 grid.inlinedit.js143-144或線 jquery.jqGrid.src.js從jqGrid的4.1.1 8262-8263)改變

tmp[nm] = $("select>option:selected,select>optgroup>option:selected",this).val(); 
tmp2[nm] = $("select>option:selected,select>optgroup>option:selected",this).text(); 

,或者只是

tmp[nm] = $("select option:selected",this).val(); 
tmp2[nm] = $("select option:selected",this).text(); 

來解決這個問題。

如果一個需要具有支撐具有multiple: true屬性選擇的:

enter image description here

應該以相同的方式如上述具有"select>option:selected"grid.inlinedit.js之一多個線路(line 149)修改。爲了使jqGrid的multiple: true屬性與dataUrl屬性一起工作,必須再修復grid.inlinedit.js的另一行(line 67)。我們無需改變

if(cm[i].edittype == "select" && cm[i].editoptions.multiple===true && $.browser.msie){ 
    $(elc).width($(elc).width()); 
} 

到例如以下

if(cm[i].edittype === "select" && typeof(cm[i].editoptions)!=="undefined" && 
    cm[i].editoptions.multiple===true && 
    typeof(cm[i].editoptions.dataUrl)==="undefined" && $.browser.msie) { 

    $(elc).width($(elc).width()); 
} 

這種變化將阻止的選擇的很小width設置它是由dataUrl$.ajax請求加載之前。可能應該在相應的$.ajax調用success的事件處理程序widthwidth的相同修復程序中從grid.common.js調用,其中將加載dataUrl的數據。我在IE9中測試了我的演示,並且不需要爲IE9進行修復。

您可以在這裏看到帶有固定jqGrid代碼的演示:the single select demo,the multiselect demo。您應該考慮在editurl中使用的服務器上沒有「/ Dropdown/GridSave」的代碼。不過,你會在Fiddeler的Firebug中看到發送到服務器的發佈數據確實包含了關於所選項目的信息。如果你想使演示在本地工作,你應該修改editurl爲'clientArray',並可能另外設置loadonce:true