4

タイトルのように、2 つのリスト間の重複を防ぐにはどうすればよいですか。#selected リストでの重複を止めようとしています。受信イベントで完了したと思われますが、運がありません。

    $(function () {

    $("#options").sortable({
        connectWith: $("#selected"),
        helper: 'original',
        revert: true,
        tolerance: "pointer",
    });

    $("#selected").sortable({
        connectWith: $("#options"),
        helper: 'original',
        receive: function (event, ui) {            
        },
    });

    $("#options,#selected").disableSelection();

    $("#SkillGroups").change(function () {
        $.ajax({
            type: "POST",
            url: "/Contractor/Contractor/GetSkillsBySkillGroup",
            data: { skillGroupId: $("#SkillGroups").val() },
            success: function (result) {
                $loadList(result);
            }
        })
    });
});
4

4 に答える 4

8

最後にそれを解決しました。ソリューションを見ると少し明白です。これを行うには、おそらく他の方法もあります。

 $("#selected").sortable({
        connectWith: $("#options"),
        helper: 'original',
        receive: function (event, ui) {

            var identicalItemCount  = $("#selected").children('li:contains(' + ui.item.text() + ')').length;
            alert(identicalItemCount);
            if (identicalItemCount > 1) {
                alert("Ahem.... we have a duplicate!!");
                $("#selected").children('li:contains(' + ui.item.text() + ')').first().remove();
            }
        },
    });
于 2013-03-29T20:03:42.640 に答える
0

data-* 属性のチェックに基づいて実行する場合の同じ解決策を次に示します。私はちょうどこれに遭遇しました、それが誰かを助けることを願っています.

receive: function (event, ui) {

    var identicalItemCount  = $(this).children("li[data-yourattribue='" + somevalue + "']").length;
    //alert(identicalItemCount);
    if (identicalItemCount > 1) {
        //alert("Ahem.... we have a duplicate!!");
        $(this).children("li[data-yourattribue='" + somevalue + "']").last().remove();
    } else {

        //your other stuff (like ajax calls, etc..)

    }

},

ドロップされたアイテムとともにセッションに追加データを保存するような ajax を行う場合、.last() を使用して、システムに既に存在するものではなく、実際にドロップされたドロップ可能オブジェクトを削除することも役立ちます。

于 2014-07-03T01:54:07.280 に答える
0

jquery.unique() HEREを使用します。DOM 要素の配列から重複を削除します。

    var l = $('#options, #selected').find('li').get();

    var lists = jQuery.unique(l);

    // build your new lists w/ $('#options').html() etc...

編集

HERE'Sは動作中のjsFiddleです

したがって、このメソッドを呼び出すときに確認する必要があるのは、文字列や数値ではなく、DOM 要素の配列に対して呼び出していることです。また、JQuery.methodName の代わりに JQuery エイリアス ($) を使用していることを確認してください。含まれている例は機能します。あとは、これをロード リスト関数から作成された要素に結び付けてから、フィルタリング後にそれぞれの ul に吐き出すだけです。

于 2013-03-27T21:17:27.170 に答える