Как удалить один виджет из gridster.js по его динамически созданному идентификатору

Мне нужно знать, как я могу удалить один виджет gridster.js по его динамически созданному идентификатору с помощью gridster.add_widget. Каждый новый созданный виджет имеет собственную кнопку для удаления этого единственного виджета, но я не могу заставить его работать.

Вот мой код

$(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 ответов

На самом деле вам не нужен идентификатор для удаления виджета. Пожалуйста, проверьте мой сценарий.

    var gridster = $('.gridster ul').gridster().data('gridster');
    $(document).on( "click", ".gridster ul li", function() {
        $(this).addClass("activ");
        gridster.remove_widget($('.activ'));
    });
  • newid var должен быть увеличен после нажатия add
  • У тега li неверный идентификатор

пожалуйста, проверьте код ниже, должен работать с вами

$(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());
    });
});

Это работает для меня, я использую метку времени в качестве уникального идентификатора

ДОБАВИТЬ ПУНКТ:

$( "#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 + "']"));

});

На самом деле, вам просто нужно обернуть '#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) {...}

Поскольку он работает с объектами jQuery, вам не нужно добавлять какие-либо классы или идентификаторы для идентификации элемента, который вы хотите удалить. Просто создайте событие 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'));
});
Другие вопросы по тегам