$(document).ready(function() vs .click(function()



我有一个填充了 $.getJSON(( 函数的页面,该函数运行良好,JSON 已正确写入 DOM,但我还有另一个函数,如果查询字符串中有匹配的值,则切换页面上元素的显示。

$(document).ready(function () {
$("#one").toggle(data.indexOf("one") !== -1);
$("#two").toggle(data.indexOf("two") !== -1);
$("#three").toggle(data.indexOf("three") !== -1);
$("#four").toggle(data.indexOf("four") !== -1);
});

例如,如果我使用任何其他事件来触发函数,则会在页面上隐藏/显示正确的元素。

$(document).click(function () {
$("#one").toggle(data.indexOf("one") !== -1);
$("#two").toggle(data.indexOf("two") !== -1);
$("#three").toggle(data.indexOf("three") !== -1);
$("#four").toggle(data.indexOf("four") !== -1);
});

有人可以解释为什么 .ready(( 函数不起作用吗?

有趣的是,使用 $.getJSON(( 函数加载页面内容似乎与它有关,因为如果我对 HTML 进行硬编码,那么我的 .ready(( 函数就可以工作了。

干杯杰夫

ready 事件在加载 dom 页面时触发。

你的 getJSON(( 函数在加载 dom 后触发!

在你的getJSON代码中添加一个承诺来改变它。

.getJSON().then(function() {
$("#one").toggle(data.indexOf("one") !== -1);
$("#two").toggle(data.indexOf("two") !== -1);
$("#three").toggle(data.indexOf("three") !== -1);
$("#four").toggle(data.indexOf("four") !== -1);
});

$(document).ready()不会等待异步调用 ($.getJSON()( 完成,因此在填充页面之前触发 ready 事件,并且要操作的元素尚不存在。

当您对数据进行硬编码时,它可以工作,因为它不必等待异步请求完成并且页面会立即填充。

最简单的解决方案是在页面由$.getJSON()调用的回调函数填充页面后立即调用事件处理程序函数。希望您在该回调函数中已经有一些机制,以确保如果请求在触发就绪事件之前完成,它不会填充页面。

最新更新