1

我有一个函数可以处理属性列表(我的候选清单)的各种类型的行为,这是一个<ul><li>设置。一种行为是<li>在您单击每个项目中的按钮时删除属性列表项,这很好,但是我if检查所有项目何时被删除的声明不起作用。

你能告诉我我做错了什么吗?onclick这是通过按钮事件和狡猾if语句处理删除项目的函数部分:

// Remove an item from the shortlist
$(this).find('.btn-minus').click(function() {
    var btnRemove = $(this);
    var propTile = $(this).parents('.property-tile');
    var propList = $('#property-listings');
    // If IE 8 / 7
    if ($('html').hasClass('lte8')) {
        propTile.hide('slide', 300, function()  {
            btnRemove.data("tooltip").hide();
        });
    }
    // All other browsers
    else {
        propTile.fadeOut(200, function()  {
            btnRemove.data("tooltip").hide();
            $(this).remove();
        }); 
    }
    if (propTile.length === 0) {
        propList.remove();
    }
});

这是对函数的调用:元素在$(".my-shortlist").myShortlist();哪里。.my-shortlist<ul>

谢谢

4

2 回答 2

0

您已将“.property-tile”元素放入变量中,因此之后隐藏它们不会将它们从您的对象变量中删除。因此,您需要重新执行选择器。

if ($(this).parents('.property-tile').length == 0) {
    propList.remove();
}

此外,就像 Roger Lindsjö 提到的那样,在这些元素实际隐藏之前进行检查是有问题的。您需要在 hide/fadeOut 的回调中执行此操作。

于 2012-06-05T08:20:37.293 回答
0

我让它工作了,我必须<li>使用该nextAll()方法检测最后一个,然后在最后一个removefadeOut效果完成后。这是完整的代码:<li>propList

// Remove an item from the shortlist
// http://stackoverflow.com/questions/2358205/invoking-a-jquery-function-after-each-has-completed
$(this).find('.btn-minus').click(function() {
    // Set variables
    var btnRemove = $(this);
    var propTile = $(this).parents('.property-tile');
    var propList = $(this).parents('#property-listings');
    var propItems = $(this).parents('.property-tile').nextAll(), count = propItems.length;
    // Remove entire list and other elements when all items have been removed
    function complete() {
        propList.remove();
        $('.sticky-panel-toolbar, .property-disclaimer, .sticky-panel').remove();
    } 
    // Remove individual items
    // If IE 8 / 7
    if ($('html').hasClass('lte8')) {
        propTile.hide('slide', 300, function()  {
            btnRemove.data("tooltip").hide();
            // Evoke complete() function
            if (count == 0) {
                complete();
            }
        });
    }
    // All other browsers
    else {
        propTile.fadeOut(400, function() {
            btnRemove.data("tooltip").hide();
            $(this).remove();
            // Evoke complete() function
            if (count == 0) {
                complete();
            }
        })
    }
});

干杯

于 2012-06-06T00:21:33.940 回答