Jquery / Gridster按钮影响所有项目而不是单个项目

时间:2017-01-18 05:11:51

标签: jquery html gridster

我使用Gridster框架创建了一个仪表板,每个仪表板项目都有一个'删除'和' pin'按钮。但是我遇到的问题是当我点击“' pin'按钮(将面板锁定到位)它会影响所有面板,而不是单个面板。删除按钮工作正常,并删除单个面板。我无法添加个人ID或类,因为面板需要是通用的。为什么pin按钮在这种情况下不起作用?

Pin(将所有面板锁定到位,但仅用于锁定相关的单个面板):

$(document).on("click", ".gridster .pin-button", function () {

    var pin = $(".gridster ul").gridster().data('gridster');
    if (pin.drag_api.disabled) {
        pin.enable($(this).parent());
    } else {
        pin.disable($(this).parent());
    }
});

删除按钮(正确删除有问题的面板):

$(document).on("click", ".gridster .delete-button", function () {

    var gridster = $(".gridster ul").gridster().data('gridster');
    gridster.remove_widget($(this).parent());

});

示例面板:

<div class="gridster row">
    <ul>
        <li class="gs_w" data-row="1" data-col="1" data-sizex="4" data-sizey="3">
            <button class="pin-button"><img src="pin.png"></button>
            <button class="delete-button"><img src="Close.png"></button>
            ... panel content ...
        </li>
    </ul>
</div>  

2 个答案:

答案 0 :(得分:0)

这是因为你的pin选择器是:

var pin = $(".gridster ul").gridster().data('gridster');

可能会发现另一个.gridster ul,这应该与currnet gridster有关,所以你可能有:

var pin = $(this).parent('.gridster');

答案 1 :(得分:0)

所以根据https://github.com/dustmoo/gridster.js 我所要做的就是给我的主要Gridster分配一个静态类,即:

<script type="text/javascript">
    var gridster;

    $(function () {
        gridster = $(".gridster ul").gridster({
            widget_base_dimensions: [100, 100],
            widget_margins: [5, 5],
            helper: 'clone',
            static_class: 'card_static',
            draggable: {
                items: ".gs_w:not(.card_static)"
            },
            resize: {
                enabled: true
            }
        }).data('gridster');
        });
</script>

然后将我的Pin JS更改为:

$(document).on("click", ".gridster .pin_button", function () {

if ($(this).parent().hasClass("card_static")) {

$(this).parent().removeClass("card_static")

} else{
$(this).parent().addClass("card_static")
}

});