Как удалить один виджет из 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'));
});