0

jquery-datatables-editable ( http://code.google.com/p/jquery-datatables-editable/ ) を使用して jQuery でテーブルを管理していますが、セルを編集するときに必要なのは、編集したばかりのセルの ID とクラスを取得します。どうやってやるの?ここに私のコードの一部があります:

//creating the table
var table = $('<table id="mytable" border="1" cellpadding="1" cellspacing="1"></table>');
var head = $('<thead><tr><th>Name</th><th>IP</th><th>Status</th><th>Last Seen</th><th>Pref. Smithers</th><th>Debug LvL</th></tr></thead>');
table.append(head);
var body = $('<tbody></tbody>');
for (var i = 0; i < x.length; i++) {
    //using xml to fill the cells
    var ip = x.item(i).getAttribute("id");
    var row = $('<tr id="' + ip + '"></tr>');
    var id = $('<td id="ip" class="' + ip + '"></td>');
    var ls = $('<td id="lastseen" class="' + ip + '"></td>');
    var nm = $('<td id="name" class="' + ip + '"></td>');
    var st = $('<td id="status" class="' + ip + '"></td>');
    var dblvl = $('<td id="defaultloglevel" class="' + ip + '"></td>');
    var prfsmth = $('<td id="preferedsmithers" class="' + ip + '"></td>');
    var lastseen = x.item(i).getElementsByTagName("lastseen")[0].childNodes[0].nodeValue;
    var name = x.item(i).getElementsByTagName("name")[0].childNodes[0].nodeValue;
    var status = x.item(i).getElementsByTagName("status")[0].childNodes[0].nodeValue;
    var defaultloglevel = x.item(i).getElementsByTagName("defaultloglevel")[0].childNodes[0].nodeValue;
    var preferedsmithers = x.item(i).getElementsByTagName("preferedsmithers")[0].childNodes[0].nodeValue;
    nm.html(name);
    id.html(ip);
    st.html(status);
    ls.html(lastseen);
    dblvl.html(defaultloglevel);
    prfsmth.html(preferedsmithers);
    row.append(nm);
    row.append(id);
    row.append(st);
    row.append(ls);
    row.append(prfsmth);
    row.append(dblvl);
    body.append(row);
}
table.append(body);

$('#service_table').append(table);


//initiating the editable datatable
var oTable = $('#mytable').dataTable().makeEditable({
    sUpdateURL: function(value, settings) {
        return (value); //Simulation of server-side response using a callback function
    },
    "aoColumns": [
        {
        indicator: 'Saving platforms...',
        tooltip: 'Click to edit platforms',
        type: 'textarea',
        submit: 'Save changes',
        fnOnCellUpdated: function(sStatus, sValue, settings) {
            alert("(Cell Callback): Cell is updated with value " + sName);
        }},
        null
        ,
    {
        indicator: 'Saving platforms...',
        tooltip: 'Click to edit platforms',
        type: 'textarea',
        submit: 'Save changes',
        fnOnCellUpdated: function(sStatus, sValue, settings) {
            //I WANT HERE TO BE ABLE TO ALERT() THE ID AND THE CLASS OF THE CELL THAT WAS JUST EDITED
            alert("(Cell Callback): Cell is updated with value " + sValue);
        }},
        null
        ,
    {
        indicator: 'Saving platforms...',
        tooltip: 'Click to edit platforms',
        type: 'textarea',
        submit: 'Save changes',
        fnOnCellUpdated: function(sStatus, sValue, settings) {
            alert("(Cell Callback): Cell is updated with value " + sValue);
        }},
    {
        indicator: 'Saving platforms...',
        tooltip: 'Click to edit platforms',
        type: 'textarea',
        submit: 'Save changes',
        fnOnCellUpdated: function(sStatus, sValue, settings) {
            alert("(Cell Callback): Cell is updated with value " + sValue);
        }}
    ]

});
4

2 に答える 2

0

いくつかの理論を提供できますが、決定的なものはありません:

これ

コールバックthisの範囲内で可能です。fnOnCellUpdated編集された を指しtdます。

設定

tdは のプロパティとしてコールバックに渡される可能性がsettingsありfnOnCellUpdatedますが、データテーブルで編集可能なドキュメントは の定義にはあまり適していませんsettings。その特性を調べてみてください。

その他のコールバック

このページは、オプションがコールバック関数を受け取ることを示していますが、引数が定義されていないというsUpdateURL同じ問題が発生します。fnOnCellUpdatedsettings

このページは、コールバックがあることを示していfnOnEditedます。これは便利かもしれませんが、その引数は完全には定義されていません。

于 2012-08-15T20:33:21.563 に答える
0

デフォルトのfnOnCellUpdated機能ではできません。ただし、jquery-datatables-editable プラグインで簡単な調整を行うことができます。

code.google で解決策を提供する問題を見つけました: この行を変更します:

settings.fnOnCellUpdated(status, sValue, settings);

settings.fnOnCellUpdated(status, sValue, aPos[0], settings);

行のIDが表示されます。

次のようなhtmlからテーブル行のIDが必要だったからです:

<tr id="46" class="odd">
    <td class="sorting_1">46</td>
    <td >0</td>
</tr>

ラインを変えました

settings.fnOnCellUpdated(status, sValue, settings);

settings.fnOnCellUpdated( fnGetCellID(this), status, sValue, settings);

関数を呼び出すと、テーブル行の ID が返されます。

fnOnCellUpdated:function(id){}
于 2012-10-18T15:38:07.800 に答える