动态添加的Gridster小部件无法关闭

时间:2014-04-17 06:28:55

标签: javascript html jsp gridster

我添加了一个带有关闭按钮的动态gridster小部件。

gridster.add_widget('<li id="wdg_news" data-row="3" data-col="5" data-sizex="2" data-sizey="3" class="tile-orange" data-ng-hide="!news.length"> <div class="db-wid"><div class="db-title"> Newss <a href="#" class="db-ctrl"><i class="icon-close"></i></a></div><div class="db-content cus_scroll" style="height:304px;"> <div class="w-list"> <c:forEach items="${newsList}" var="news"><div><a href="/news/{{ne.id}}"  class="w-font-s f-white">${news.date} - ${news.summery}</a></div></c:forEach></div></div></div> </li>', 2, 3);        

所有数据都被加载到它没有任何问题,当我点击关闭按钮时,它进入登录屏幕,调用javascipt。

// Remove Grid
$(".db-ctrl").on("click", function(e) {
    e.preventDefault();

    var parentLi = $(this).parents("li");
    var eq_val = $(".gridster ul li").index(parentLi);
    gridster.remove_widget($('.gridster li').eq(eq_val));
    console.log(eq_val);
    saveGrid();
})

这不会发生在已创建的小部件上。仅限使用gridster.add_widget方法动态创建的。

请帮忙解决这个问题。在此先感谢.....

1 个答案:

答案 0 :(得分:0)

您需要做的是,而不是.on("click"),您需要使用.delegate("click")

.on侦听DOM中已存在的元素。 .delegate侦听DOM中已存在的元素,并在将来添加(例如,当您动态添加小部件时)。

所以你只需要修改你的点击处理程序

$(".gridster").delegate("click", ".db-ctrl", function(e) {
    e.preventDefault();

    var parentLi = $(this).parents("li");
    var eq_val = $(".gridster ul li").index(parentLi);
    gridster.remove_widget($('.gridster li').eq(eq_val));
    console.log(eq_val);
    saveGrid();
})