根据放入可排序列表中的元素数更改div的类

时间:2013-01-30 10:41:57

标签: jquery draggable jquery-ui-sortable content-length

这是我想要实现的目标 - 我在可排序列表(#sortable2)中有七个列表项,我将其拖放到一个空的可排序列表(#sortable1)中。

我想计算新的可排序列表(#sortable1)中的元素数量,并显示一条警告,告诉用户当前的项目数。我希望这可以在项目被移除时工作。

这是我的HTML:

    <ul id="sortable2" class="dropfalse">
       <li id="1">Section 1</li>
       <li id="2">Section 2</li>
       <li id="3">Section 3</li>
       <li id="4">Section 4</li>
       <li id="5">Section 5</li>
       <li id="6">Section 6</li>
       <li id="7">Section 7</li>
    </ul>

    <ul id="sortable1" class="droptrue">

</ul>

和jQuery:

    $("#sortable1 li").each(function() {
        var elem = $(this);

        // I have just added one example here (if two added) for brevity

        if (elem.children("li").length = 2) {
            alert('There are two elements');
        }
});

3 个答案:

答案 0 :(得分:1)

你需要在droppable的drop事件上运行它 - 假设jQueryUI可以删除,这样的事情会起作用:

$('#sortable1').droppable({
    drop: function(event, ui) {
        var liCount = $("#sortable1 li").length;
        // do something with liCount...
    }
});

答案 1 :(得分:0)

两个主要问题是:

在计算元素数量时使用赋值而不是等式

计算li元素的子元素而不是ul元素 正确的代码:

$("#sortable1").each(function() {
        var elem = $(this);

        // I have just added one example here (if two added) for brevity

        if (elem.children("li").length == 2) {
            alert('There are two elements');
        }
});

答案 2 :(得分:0)

您应该使用receiveremove事件 - 如Sortable API中所述。

Here's a working example in jsfiddle以及此处的示例代码:

function addRemoveHandler(event, ui) {
    alert("Number of items in sortable1: " + $(this).find("li").length);
}

$( "#sortable2" ).sortable({
    connectWith: "ul"
});
$( "#sortable1" ).sortable({
    connectWith: "ul",
    receive: addRemoveHandler,
    remove: addRemoveHandler
});