如何通过动态创建的id从gridster.js中删除单个小部件

时间:2013-12-20 13:51:24

标签: jquery widget gridster

我需要知道如何通过gridster.add_widget动态创建的id删除单个gridster.js小部件。创建的每个新窗口小部件都有一个自己的按钮来删除该单个窗口小部件,但我无法使其工作。

这是我的代码

$(document).ready(function(){

var count = 0;
var newid = count + 1;

    $(document).on("click", "#newGrid", function() {
        var gridster = $(".gridster ul").gridster().data('gridster');
        gridster.add_widget('<li id="block"'+newid'>Hello, now delete me <span id="remove"'+newid'>x</span></li>',2 ,1);
    });

    $(document).on('click', '#remove'+newid, function() {
    var gridster = $(".gridster ul").gridster().data('gridster');
        gridster.remove_widget( '#block'+newid );
    });

});

对于添加小部件,它工作正常,但我无法删除小部件。

5 个答案:

答案 0 :(得分:6)

实际上,您不需要ID来移除小部件。请检查我的脚本。

    var gridster = $('.gridster ul').gridster().data('gridster');
    $(document).on( "click", ".gridster ul li", function() {
        $(this).addClass("activ");
        gridster.remove_widget($('.activ'));
    });

答案 1 :(得分:0)

实际上,您只需将'#block'+newid包装在jQuery元素中,如函数注释中所述:

gridster.remove_widget( $( '#block'+newid ) );

功能评论(在jquery.gridster.js中):

/**
 * Remove a widget from the grid.
 *
 * @method remove_widget

* @param {HTMLElement} el jQuery包含要删除的HTMLElement。

 * @param {Boolean|Function} silent If true, widgets below the removed one
 * will not move up. If a Function is passed it will be used as callback.
 * @param {Function} callback Function executed when the widget is removed.
 * @return {Class} Returns the instance of the Gridster Class.
 */
fn.remove_widget = function(el, silent, callback) {...}

答案 2 :(得分:0)

    点击添加后,应增加
  • newid var
  • li标签没有正确的ID

请检查下面的代码,应该与您合作

$(document).ready(function(){

var count = 0;
var newid = count + 1;

$(document).on("click", "#newGrid", function() {
    var gridster = $(".gridster ul").gridster().data('gridster');
    gridster.add_widget('<li id="block'+newid+'">Hello, now delete me <span class="remove">x</span></li>',2 ,1);
    newid++;
});

    $(document).on('click', '.remove', function() {
        var gridster = $(".gridster ul").gridster().data('gridster');
        gridster.remove_widget( $(this).parent());
    });
});

答案 3 :(得分:0)

由于它适用于jQuery对象,因此您无需添加任何类或ID来标识要删除的项目。只需创建一个click事件并引用$(this)。

$('body').on( "click", ".gridster ul > li", function() {
     gridster.remove_widget($(this));
});

或者更有用的地方,你在li里面有一个“删除按钮”:

$('body').on( "click", ".gridster ul > li .remove", function() {
  gridster.remove_widget($(this).closest('li'));
});

答案 4 :(得分:0)

这适用于我,我使用时间戳作为唯一ID

添加项目:

$( "#addMod").click(function(e) {
   gridster1.add_widget(
        '<li class="crItem" id="' + $.now() +  '">DESCRIPTION
         <i class="fi-wrench"></i>
         <i class="fi-x" id="delItem"></i></li>', 1, 1
      );  
 });

删除项目:

$('#cashRegisterScreen').on('click', '#delItem', function() {          
    var id=$(this).parent().attr("id");             
    gridster.remove_widget($(".gridster ul").find("[id='" + id + "']"));

});