2

JQGrid 4.3.0、Jquery 1.6.2、およびJQuery UI 1.8.16を実装すると、インライン編集で問題が発生しました。インライン編集がアクティブになると、一部の要素にオートコンプリートが割り当てられます。インライン編集がキャンセルまたは保存された場合、オートコンプリートが常に消えるわけではありません(テキストをダブルクリックして削除を押し、次にエスケープを押して行編集を終了することでテキストを選択します)。行が編集モードで考慮されなくなったときに、オートコンプリートコントロールを編集モードのままにしておきます。

おそらく、初期化に問題があるかどうか、または「afterrestorefunc」後のイベントでフィールドを「元の」状態に戻すことができることを知っているかどうかを教えてください。JQGrid行にデータとして表示されている元の状態。

行を閉じた後、.remove()および.empty()でDOMを削除しようとしました。

 ... 
"afterrestorefunc": function(){ 
    $('.ui-autocomplete-input').remove();  }
...

ただし、データや編集のために行をシリアル化するときにjqgridがセルを見つけることができず、その行のデータをもう一度表示できるようにするには、jqgridだけでなく、ページを更新する必要があるなど、他の問題が発生します。 。

要素のオートコンプリート機能は、行をダブルクリックすると作成されます。

function CreateCustomSearchElement(value, options, selectiontype) {
...
            var el;
            el = document.createElement("input");
            ...
            $(el).autocomplete({
                source: function (request, response) {
                    $.ajax({
                        url: '<%=ResolveUrl("~/Services/AutoCompleteService.asmx/GetAutoCompleteResponse") %>',
                        data: "{ 'prefixText': '" + request.term + "', 'contextKey': '" + options.name + "'}",
                        dataType: "json",
                        type: "POST",
                        contentType: "application/json; charset=utf-8",
                        success: function (data) {
                            response($.map(data.d, function (item) {
                                    return {
                                        label: Trim(item),
                                        value: Trim(item),
                                        searchVal: Trim(item)
                                    }

                            }))
                        }
                    });
                },
                select: function (e, item) {
                    //Select is on the event of selection where the value and label have already been determined.                        
                },
                minLength: 1,
                change: function (event, ui) {
                    //if the active element was not the search button                      
                    //...                       
                }
            }).keyup(function (e) {
                if (e.keyCode == 8 || e.keyCode == 46) {
                    //If the user hits backspace or delete, check the value of the textbox before setting the searchValue                
                    //...
                }
            }).keydown(function (e) {
                //if keycode is enter key and there is a value, you need to validate the data through select or change(onblur)
                if (e.keyCode == '13' && ($(el).val())) {
                    return false;
                }
                if (e.keyCode == '220') { return false }
            });
        }

その他の情報源: http ://www.trirand.com/jqgridwiki/doku.php?id = wiki:inline_editing

http://api.jqueryui.com/autocomplete/

更新: 要素がフォーカスされているときにオートコンプリートを作成し、オンブラーのときにそれを削除しようとしました。それでも問題は解決しませんでした。オートコンプリートドロップダウンをトリガーする必要があるようです。

4

1 に答える 1

0

オートコンプリートを呼び出す前に、カスタムの有効化/無効化機能があります。これにより、同じjqgridセルへの複数の参照呼び出しが発生し、競合が発生します。したがって、インライン編集を開くことになっている行のダブルクリックイベント中に。行が取得され、レコードタイプに基づいて有効化/無効化する必要のあるセルが分析されます。これは、ページの読み込み中にコードビハインドから、非表示のフィールド値にシリアル化された、連想配列で使用可能なフィールドを決定します。

function tableRowDoubleClick(id, iRow, iCol, e) {
...
setCellEditabilityByRecordType(id);
...    
}

セルの編集可能性は、次の方法で設定されます。

 function setCellEditabilityByRecordType(id) {
//change some of the fields to read-only
var grid = $('#mygrid');
var i;
var cm;
var cellRecordType = grid.jqGrid('getCell', id, 'RecordType')
//Determine Fields Disabled by evaluation of data from a hidden field.
var disablefields = eval(pg_FieldDisable[cellRecordType]);
for (i = 0; i < disablefields.length; i++) {
cm = grid.jqGrid('getColProp', disablefields[i]);
cm.editable = false;
}
...
}
...

したがって、行の初期設定がダブルクリックに反応すると、セルの編集可能性が設定されます。次に、「CreateCustomSearchElement」がトリガーされます。

ただし、ユーザーが行をダブルクリックすると、もう一度ダブルクリックがトリガーされ、同じ行に対してセルの編集可能性が設定されます。したがって、これによりセルへの複数の参照が発生しますが、現時点では、何が起こっているのかわかりません。私が知っているのは、行の編集可能性を1つの関数に集中させるか、ダブルクリックされた現在の行が本当に編集可能性の設定を再度必要とするかどうかを読み取る方法を見つける必要があるということだけです。

参照JavaScript連想配列: http ://blog.xkoder.com/2008/07/10/javascript-associative-arrays-demystified/

于 2012-10-17T16:58:09.097 に答える