javascript - Jquery UI Sortable 在动态容器中不起作用

标签 javascript jquery html jquery-ui jquery-ui-sortable

我有一个容器,我在其中动态添加部分,我在该部分内创建项目,这应该是可排序的,但是Jquery可排序在动态创建的容器中不起作用,而如果我给容器静态它的工作原理, 谁能分享一下解决方案吗?谢谢 Image after adding dynamic container

https://jsfiddle.net/anubala/7ut5wk3j/1/

HTML:

<div class='row page-layout'>
        <div class='col-md-10 col-md-offset-1' >
        <div class="add_section_div">
            <p>Add section</p>
        </div>
        <div id="contents">
        </div>
        </div>
    </div>

JavaScript:

$(".wrap_body").sortable();
$(".add_section_div").on("click", function() {
    var $section = "<div class='section_div'><div class='div_header clearfix'><p class='pull-left'>Add Wrap</p></div><div class='section_body div_body'></div></div>";
    $("#contents").append($section);

})
$("body").on("click", ".section_div>.div_header", function() {
    var $wrap = "<div class='wrap_div'><div class='div_header clearfix'><p class='pull-left'>Add Item</p></div><div class='wrap_body div_body clearfix'></div></div>";
    $(this).parent().find('.section_body').append($wrap);
})
const regex = /^.*-\s*(.*)$/;
$("body").on("click", ".wrap_div>.div_header", function() {
    var $item1 = "<div class='drag col-sm-";
    var $item2 = "'><div class='item_div'><div class='div_header clearfix'><p class='pull-left'><span class='minus'><i class='fa fa-minus'></i></span><span class='plus'><i class='fa fa-plus'></i></span></p><p class='pull-left header_text'>";
    var $item3 = "</p></div><div class='div_body'></div></div></div>";
    var length_item = $(this).parent().find(".wrap_body .item_div").length;
    var count = 0;
    for (i = 0; i < length_item; i++) {
        if ($(this).parent().find(".wrap_body>div:eq('" + i + "')")) {
            console.log($(this).parent().find(".wrap_body>div:eq('" + i + "')"))
            var col_count_text = $(this).parent().find(".wrap_body>div:eq('" + i + "')").attr('class');
            count += parseInt(find_col_count(col_count_text));

        }
    }
    var current_col_count = 12 - (count % 12);
    if (count < 12) {
        $(this).parent().find('.wrap_body').append($item1 + current_col_count + $item2 + "col-sm-" + current_col_count + $item3);
    }
})


function find_col_count(col_text) {
    var col_count = regex.exec(col_text);
    col_count.forEach((match, groupIndex) => {
        count1 = match;
    });
    return count1;
}
$("body").on("click", ".plus", function() {
    var $parent = $(this).parent().parent().parent().parent();
    var col_count_text = $parent.attr('class');
    var length_item = $parent.parent().find(".item_div").length;
    var count = 0;
    for (i = 0; i < length_item; i++) {
        if ($parent.parent().find(".item_div:eq('" + i + "')").parent()) {
            var col_count_text = $parent.parent().find(".item_div:eq('" + i + "')").parent().attr('class');
            count += parseInt(find_col_count(col_count_text));
        }
    }
    var col_count_text = $parent.attr('class');
    var col_count = find_col_count(col_count_text);
    if (count < 12) {
        var col_count_new = "col-sm-" + (++col_count);
        var col_count_drag = "drag " + col_count_new;
        $parent.attr("class", col_count_drag);
        $parent.find(".header_text").html(col_count_new);
    }
});
$("body").on("click", ".minus", function() {
    var $parent = $(this).parent().parent().parent().parent();
    var col_count_text = $parent.attr('class');
    var col_count = find_col_count(col_count_text);
    if (col_count > 1) {
        var col_count_new = "col-sm-" + (--col_count);
        var col_count_drag = "drag " + col_count_new;
        $parent.attr("class", col_count_drag);
        $parent.find(".header_text").html(col_count_new);
    }
});

最佳答案

您可能已经找到了解决方案,但要解决此问题,您只需移动此行

$(".wrap_body").sortable();

实际将 .wrapper_body 附加到 body 的位置,如下所示:

$("body").on("click", ".section_div>.div_header", function() {
        var $wrap = "<div class='wrap_div'><div class='div_header clearfix'><p class='pull-left'>Add Item</p></div><div class='wrap_body div_body clearfix'></div></div>";
        $(this).parent().find('.section_body').append($wrap);
        $(".wrap_body").sortable();
    });

这应该可以解决您的问题。请参阅JsFiddle

关于javascript - Jquery UI Sortable 在动态容器中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44995900/

相关文章:

javascript - 创建嵌套数组javascript

java - 从 div 元素获取文本并修改其整数部分 - Selenium Webdriver (Java)

html - SAPUI5:创建以图标为中心的 GenericTile

javascript - 如何修复 for..in 循环中的 "Uncaught ReferenceError"

javascript - 内容缩小后完美滚动条继续显示

jquery - 使用引导模式框更改输入数据

jquery - 该对象 "undefined"

javascript - Vuejs 布局和页面组件

javascript - 如何检测操作系统当前语言

javascript - 使用 jquery 在 body [所有元素] 中搜索类