14

これは非常に単純なことだと確信しています。通常はそうです。

$('#sort-table').tableDnD({
    onDragClass: "dnd_drag",
    onDragStart: function(table, row) {
        console.log("start drag");
    },
    onDrop: function(table, row) {
        console.log($.tableDnD.serialize());
    },
    dragHandle: ".dragHandle"
});

jQueryテーブルソートプラグインであるtableDnDに対して上記のコードを実行しています。これは、彼らが提供するサンプルからの正確なコードですが、テーブルにアイテムをドロップすると、onDropイベントが正しく発生しません。コンソールに応答がありません。テーブルは初期化され、ドラッグハンドルは正しく機能するので、少なくともコードの一部が正しいことはわかっています。動作させることができないのは、onDropコマンドだけです。

更新:
上記のコードを更新して、onDragStartとonDragClassを追加しました。どちらも完全に機能しますが、失敗するのはonDrop関数だけです。

これは私の一般的なテーブルレイアウトです:

<table id="sort-table">
    <tbody class="sort-items">
        <tr class="1">
            <td class="dragHandle"></td>
            ...
        </tr>
        ...
    </tbody>
</table>
4

3 に答える 3

28

onDropを機能させるには、tr[id]属性を定義する必要があります。これは、onDropは行の順序が変更された場合にのみ起動するためです。ただし、tr [id]属性を指定しないと、tableDnD.serialize()は並べ替えがなかったと見なします。(確かにバグ)

于 2013-01-08T06:04:23.913 に答える
6

さて、私の最初の質問と私はそれに対する答えを得ました。これが将来誰かに役立つことを願っています。

問題は、テーブル行の実際のIDにありました。私は実際にuuidを使用していました。つまり、私の行は実際には「26b5122e-bbb8-11e1-9c53-d4856404b576」のようなIDを持っていました。どうやらTableDnDは、私のIDを分解し、ほとんどの項目で同じであった最後の番号のグループのみを取得したデータのある種のシリアル化を行っているようです。

問題の原因となったjquery.tablednd.jsファイルの行は次のとおりです(380行目あたり)。

...
var rowId = rows[i].id;
if (rowId && table.tableDnDConfig && table.tableDnDConfig.serializeRegexp) {
    rowId = rowId.match(table.tableDnDConfig.serializeRegexp)[0];
}

result += tableId + '[]=' + rowId;
...

行IDにはシリアライザーが必要ないことがわかっていたので、シリアライザーを削除しただけです。次に、行IDを自分に渡しました。これが結果でした。

...
var rowId = rows[i].id;

result += tableId + '[]=' + rows[i].id;
...

したがって、行IDにダッシュを使用する場合は、onDropが正しく起動するように、これを変更してください。

于 2012-08-02T14:31:44.993 に答える
1

クイックフィックス。

row.idがなくてもonDropを機能させたい場合は、プラグインを編集できます。

これを置き換えます(255行目は関数が開始する場所です-currentOrder)

        var rows = this.currentTable.rows;
        return $.map(rows, function (val) {
            return ($(val).data('level') + val.id).replace(/\s/g, '');
        }).join('');

これとともに

    return $(this.dragObject).index();
于 2015-03-03T09:18:18.170 に答える