javascript - jquery - 仅在异步调用完成后显示 div

标签 javascript jquery html

在我的页面上,有两个 Divs A 和 B

Div B 默认隐藏。

Div A 只包含一个按钮。单击它时,我希望A 隐藏并显示B

但是 div B 的内容包含一些被异步 REST 调用淹没的数据。

所以我希望 B 仅在其所有内容准备就绪时显示。

HTML:

<div id="A">
    <button id="button1">Click here</button>
</div>
<div id="B"></div>

JS代码

//Approach 1 I tried:
$(document).ready(function() {
    $("#B").hide();  // Div B hidden by default
    $("#button1").click(function () {
        $.when (
            renderChildPage()
        ).done (
            $("#B").show()
        )
    });
});

function renderChildPage() {
    // 1. some async calls
    // 2. fill some elements in Div B.
}

但上面的代码无法正常工作,因为 Div B 中的一些元素得到了显示,而另一些则没有。

//Approach 2 I tried:
$(document).ready(function() {
    $("#B").hide(); // Div B hidden by default
    $("#button1").click(function (){
        $("#B").show();
        renderChildPage;        // Code even working without it.
    });
});


var renderChildPage = (function () {
    // 1. some async calls
    // 2. fill some elements in Div B.
})();

这种方法有效,但即使我不调用 renderChildPage(),该函数仍会被调用并显示 div B 中的内容。

有人可以建议正确的方法吗?

同样在方法 2 中,为什么代码在没有调用的情况下被执行。

谢谢

最佳答案

您的做法是正确的。 done 接受回调并在 when 完成时执行。

$(document).ready(function() {
    $("#B").hide();  // Div B hidden by default
    $("#button1").click(function () {
        $.when (
            renderChildPage();
        ).done (function(){
            $("#B").show()
          }
        )
    });
});

关于javascript - jquery - 仅在异步调用完成后显示 div,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50464356/

相关文章:

javascript - 从对象中分离键和值

javascript - 有没有办法创建 "inline-none"CSS 效果?将被隐藏,但保留它在页面上占用的空间

javascript - JS : call methods of an object inside jquery "click"

javascript - ReactJS 自定义三态复选框不会显示复选标记

javascript - 在循环 BScard 中使用 getElementByClassName 获取输入类型的值

javascript - 使用 ajax 解析 CSV 并在某些列上执行异步任务

javascript - 链接功能作为 promise

javascript - 迭代 Id,存储值,放入数组中

javascript - 工具提示 css 在 li 中的绝对位置

javascript - 将附加参数传递给函数调用 (lodash)