1

datatables.editable と Jeditable を使用して jquery Datatable を実装しました。テキスト領域を編集可能フィールドとして使用できますが、選択を編集可能として設定する際に問題があります。

編集可能を初期化する次のコードがあります。

oTable.makeEditable({  
    sUpdateURL: "../ReconService.asmx/UpdateUser",  
    "aoColumns": [  
        null,  
        null,  
        {  
            indicator: 'Updating user...",  
            tooltip: "Change user",  
            type: "select",  
            submit: "Save",  
            data: getUserFilterOptions()  
        } 
    ]   
});

次に、DB からユーザーのリストを取得するための javascript/jquery 関数があります。関数内で、さまざまなことを試しました。現在の関数は、文字列を Web サイトjeditableで指定された形式に手動でアセンブルします。

私が持っている機能は次のとおりです。

function getUserFilterOptions() { 
    $.ajax({  
        type:"POST",  
        contentType: "application/json; charset=utf-8",  
        url: "../ReconService.asmx/GetUsers",  
        dataType: "json",  
        success: function(result){  
            var userResult = result.d;  
            if (userResult.length > 0){  
                var text = "{'Select':'Select',";  
                $.each(userResult, function(index, val) {  
                    text += "'";  
                    text += val["value"];  
                    text += "':'";  
                    text += val["value"];  
                    text += "'";  
                    text += ",";  
                });  
                text += "'selected:'Select'}";  
                return text;  
            }  
        },  
    }); 
}

Chrome の開発者ツールを使用して関数をステップ実行すると、関数は次の文字列を返します:
"{'Select':'Select','Administrator':'Administrator','User1':'User 1','selected ':'Select'}"
私が知る限り、形式は正しいのですが、編集可能なテーブル セルをクリックするとエラーが発生します。

キャッチされていない SyntaxError: 入力の予期しない終了 jquery.jeditable.mini.js:34 $.editable.types.select.content jquery.jeditable.mini.js:34 $.fn.editable.each.reset.self.editing jquery.jeditable .mini.js:18 jQuery.event.dispatch jquery-1.8.3.js:3058 jQuery.event.add.elemData.handle.eventHandle jquery-1.8.3.js:2676

紛らわしいのは、その文字列値をコピーして jeditable の data パラメータに直接入れると、正常に動作することです。このリテラル文字列を返すだけの関数も作成しましたが、正常に動作します。

例として、関数の内容を次のように置き換えます。

function getUserFilterOptions(){  
    return "{'Select':'Select','Administrator':'Administrator','User1':'User 1','selected':'Select'}"  
}  

これはうまくいきます。

私はjavascriptの専門家ではないので、助けていただければ幸いです。

4

1 に答える 1

0

次のように、ajax リクエストのタイプを非同期から同期に変更する必要があります。

function getUserFilterOptions() { 
  return $.ajax({  
    type:"POST",  
    contentType: "application/json; charset=utf-8",  
    url: "/url",  
    dataType: "json",  
    async: false,
  }).responseText;
}

サーバーからjsonを返そうとしましたが、動作します。

于 2012-12-12T18:03:00.127 に答える