0

Web ページに 9 個 (3 行と 3 列) の div 要素があり、jquery の並べ替え可能なメソッドを実装しています。ユーザーが要素を別の要素に移動すると、並べ替える代わりに交換する必要があります。たとえば、1 番目の要素を 5 番目に移動する場合、1 番目の要素は 5 番目の位置に移動し、5 番目の要素は 1 番目の位置に移動する必要があります。基本的には交換です。

sortstop イベントで移動する要素の現在および古いインデックスを見つけ、インデックスに基づいて要素を挿入することで、これを達成しました。しかし、私は以下の問題があります。

例: ユーザーが 1 番目の要素から 5 番目の要素を取得すると、手動でスワップを行う前に並べ替えが行われるため、ユーザーは並べ替えでマウスを放さないと結果が異なると感じます (2 番目が 1 番目の位置になり、3 番目が 2 番目になるなど.. )ソート停止イベントでスワップするので、実際のスワップで。

これに対する回避策があれば教えてください。

よろしく、

M.シーヌバサン

以下の私のコード:

脚本

    $("#sortable").sortable({

        handle: '.portlet-header'
    });


$("#sortable").on("sortstop", function (event, ui) {

var currentPortid = ui.item.attr("id");
    var currentIndex = ui.item.index();

var oldIndex = -1;
    var oldPortid = "";

//to get old index, this array will hold all the index while page load and update based on swap
    for (i = 0; i < PortletIndex.length; i++) {
        if (PortletIndex[i][0] == currentPortid) {
            oldIndex = PortletIndex[i][1];
        }
        if (PortletIndex[i][1] == currentIndex) {
            oldPortid = PortletIndex[i][0];
        }
    }

$($("#sortable div.portlet")[oldIndex]).after($("#" + oldPortid));

});

HTML:

<div id="sortable">
            <div id="myportlet1" class="portlet sortable row1" >
                <div class="portlet-header">

                </div>

            </div>
            <div id="myportlet2" class="portlet sortable row1" >
                <div class="portlet-header">

                </div>

            </div>
            <div id="myportlet3" class="portlet sortable row1" >
                <div class="portlet-header">

                </div>

            </div>
            <div id="myportlet4" class="portlet sortable row2" >
                <div class="portlet-header">

                </div>

            </div>
            <div id="myportlet5" class="portlet sortable row2" >
                <div class="portlet-header">

                </div>

            </div>
            <div id="myportlet6" class="portlet sortable row2" >
                <div class="portlet-header">

                </div>

            </div>
            <div id="myportlet7" class="portlet sortable row3" >
                <div class="portlet-header" >

                </div>

            </div>
            <div id="myportlet8" class="portlet sortable row3" >
                <div class="portlet-header">

                </div>

            </div>
            <div id="myportlet9" class="portlet sortable row3" >
                <div class="portlet-header">

                </div>

            </div>
        </div>
4

0 に答える 0