【问题标题】:Wait for all async functions to complete in jQuery等待所有异步函数在 jQuery 中完成
【发布时间】:2013-04-03 11:42:06
【问题描述】:

我正在使用 jQuery 过滤表,一切都很好。此代码运行良好:

$("*[id$='EquipmentTypeDropDownList']").change(filterTable);
$("*[id$='StateDropDownList']").change(filterTable);

function filterTable() {
  var $equipmentDropDown = $("*[id$='EquipmentTypeDropDownList']");
  var $stateDropDown = $("*[id$='StateDropDownList']");

  var equipmentFilter = $equipmentDropDown.val();
  var stateFilter = $stateDropDown.val();

  $("tr.dataRow").each(function () {
    var show = true;

    var equimpent = $(this).find("td.equipment").text();
    var state = $(this).find("td.readyState").text();

    if (equipmentFilter != "Any" && equipmentFilter != equimpent) show = false;
    if (stateFilter != "Any" && stateFilter != state) show = false;

    if (show) {
      $(this).fadeIn();
    } else {
      $(this).fadeOut();
    }
  });

  $("table").promise().done(colorGridRows);
}

function colorGridRows() {
  //for table row
  $("tr:visible:even").css("background-color", "#DED7D1");
  $("tr:visible:odd").css("background-color", "#EEEAE7");
}

colorGridRows 函数更改偶数/奇数行的背景颜色以提高可读性 现在,如果我可以用淡入/淡出替换显示/隐藏调用会很好,但我不能,因为着色不起作用(它在 UI 效果完成之前运行。如果它只是一个函数参数 - 我只会创建函数完成并完成它。但是我的表有很多行并且循环遍历每一行。我如何等待 ALL 完成?

已编辑:代码示例已更新,显示我如何尝试使用 promise(),但它不起作用。它会触发,但我没有得到奇数/偶数颜色。

【问题讨论】:

  • 为什么不同时在show 行和addClass 中添加一个计数器?将意味着少一个循环来调整样式
  • 有什么理由不使用 css 而不是 jquery 来设置偶数行和奇数行的样式?
  • 我做了(即使它不适用于旧版浏览器)但现在它不起作用,因为我过滤了数据。 CSS 在着色时不考虑隐藏行

标签: javascript jquery


【解决方案1】:

将 promise 对象用于动画。

        $("*[id$='StateDropDownList']").change(function () {
            var filtervar = $(this).val();
            $('tr td.readyState').each(function () {
                if (filtervar == "Any" || $(this).text() == filtervar) {
                    $(this).parent().fadeIn();
                } else {
                    $(this).parent().fadeOut();
                }
            }).parent().promise().done(colorGridRows);

            //colorGridRows();
        });

【讨论】:

  • 嗯。我认为它有效,但它不能可靠地工作。当我在下拉列表中单击向上/向下时,它会过滤数据但不能正确着色行
  • 更新了我原来的帖子,展示了我如何尝试使用 promise() 却没有运气:(
  • 如果你点击慢点但不快点是否有效?如果您快速单击,我预计会有问题,这是一个完全不同的问题。
  • 似乎是的,有时它有效。很难确切地说出来
猜你喜欢
  • 2019-03-15
  • 2019-06-16
  • 1970-01-01
  • 2019-05-17
  • 2019-11-29
  • 2020-02-22
  • 1970-01-01
  • 2021-03-24
  • 2023-03-10
相关资源
最近更新 更多