2011-06-27 14 views
2

edittypeを持つJQGrid列があります:dataUrlを使用して 'Select'を使用して、異なる勘定グループのグループを含むアカウントの一覧を返します。JQGrid Edittype:dataurlを使用して 'select'が返されます <optgroup>は選択値を保存しません

私の問題:行を保存するときに、選択列のediturlに値が渡されません。私が削除した場合、私の選択列の値はediturlに渡されます。

説明:私の列データの場合は、値ではなくアカウント名を返します。そのため、グリッドが読み込まれると名前が表示されます。

行を編集(インライン編集)すると、dataUrlが呼び出され、選択リストが表示され、行データに対して[アカウント]が選択されます。

次に、[選択]リストから新しいアカウントを選択し、[Enter]を押して保存します。選択したアカウントの値は、列のediturl関数に渡されません。アカウントから値を削除すると、値がediturl関数に渡されます。

私はあなたが私を助けることができる願って、私は何か間違ったことをやっているかどうかわからないんだけど、つまりグリッドパラメータを設定していない、

。事前に

おかげで、

クリス

私のグリッドコード:

/ドロップダウン/ GridDataの出力:

{"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

の出力
<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コードを少しデバッグし、1つの必要が

tmp[nm] = $("select>option:selected",this).val(); 
tmp2[nm] = $("select>option:selected", this).text(); 
からjqGridのコードの2つだけのライン(ライン grid.inlinedit.js143-144や線jqGrid 4.1.1から jquery.jqGrid.src.jsの8262から8263)を変更することが判明しましたこの問題を解決する

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

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

またはちょうどに

1はmultiple: true属性を持つ選択のサポートを持っている必要がある場合は、次の

enter image description here

1は"select>option:selected"を持つgrid.inlinedit.jsの1行(line 149)上記と同じように変更する必要があります。 multiple: true属性を持つjqGridをdataUrlプロパティで動作させるには、grid.inlinedit.jsのもう1行(line 67)を修正する必要があります。一つはそれがdataUrlから$.ajax要求によってロードされる前に、選択の非常に小さな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()); 
} 

次の例のために

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

を変更する必要が。おそらく、対応する$.ajaxコールのsuccessイベントハンドラ内にwidthの同じ修正を配置し、dataUrlのデータがロードされるgrid.common.jsからの呼び出しを配置する必要があります。私はIE9で私のデモをテストし、IE9の修正を行う必要はありません。

ここで固定jqGridコードを使用してデモを見ることができます:the single select demothe multiselect demoediturlで使用されるサーバー上の "/ Dropdown/GridSave"のコードがないことを考慮する必要があります。それにもかかわらず、FirebugのFiddelerでは、サーバーに送信される投稿データに、選択した項目に関する情報が含まれていることがわかります。デモをローカルで動作させる場合は、editurlを 'clientArray'に変更し、おそらくさらにloadonce:trueを設定する必要があります。

関連する問題