【问题标题】:jQuery ajax after fade out and remove table row animation淡出和删除表格行动画后的jQuery ajax
【发布时间】:2012-01-06 14:30:57
【问题描述】:

那里有很多演示说明如何淡出表格行,并且为了 IE,我们必须淡出表格单元格,然后在动画完成后删除行。比如这个问题:fadeout and remove table row

我的这项技术效果很好。现在我想在行被淡出并删除后用 ajax 调用刷新我的表。如果我将此 ajax 加载放在 fadeOut 完成回调中,它将为我的表格中的每一列触发一次(因为我正在淡出表格单元格,而不是行)。这会导致一堆 ajax 请求堆积起来。 (工作正常,半身像是浪费和不好的做法。)

所以我想淡出并删除表格行,然后只触发一次事件/调用函数来更新网格。 jQuery 中的最佳实践是什么?我需要为所有表格单元格设置动画,但只有一个动画完成回调。

.remove() 上没有回调,所以我应该使用 .hide() 之类的其他效果并将 .remove() 与 ajax 一起放在其回调中吗?这将如何与跨浏览器兼容性公平?在旧版本的 IE 中,是否存在影响表格行的任何已知问题?


注意: 并不是说​​它有什么不同,但我碰巧使用的是构建在 jQuery UI 之上的 wijmo 网格小部件。但它只是标记中的普通 html 表。淡出/移除效果很好。

【问题讨论】:

    标签: javascript jquery wijmo


    【解决方案1】:

    您面临的问题是fadeOut 的回调针对每个匹配的元素(所有tds)执行,而不是针对整个集合。您需要做的是在最后一个元素淡出之后放置 remove 和 ajax。您可以在下面找到您引用的问题中的代码已更新以满足此需求(警报和删除只会执行一次):

    // don't use live, switch to delegate
    $('#tbl').delegate('td', 'click', function() {  
        var tr = $(this).parents('tr:first'),
            tds = tr.find('td'),
            l = tds.length;
    
        tds.fadeOut('fast', function(){ 
            if (! --l) {
                tr.remove();                    
                alert('ajax');
            }
        });    
    
        return false;
    });
    

    下面是它的一个小例子:http://jsfiddle.net/a76A6/2/

    【讨论】:

    • 这很好用,并删除了 last td 上的行以完成其淡出,而不是 first td。我不知道这有很大的不同,但至少在理论上对我来说似乎“更正确”。我什至没有考虑使用闭包。 :)
    猜你喜欢
    • 2011-11-06
    • 2012-05-31
    • 2019-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-27
    • 2013-11-27
    相关资源
    最近更新 更多