gpt4 book ai didi

javascript - 在 $(document).ready 期间无法更改在 $(document).ready 期间添加的元素

转载 作者:行者123 更新时间:2023-11-30 13:28:04 25 4
gpt4 key购买 nike

我实现了一个带有选项列表(工作类别)的页面,单击该页面时应显示数据(工作描述)。我正在使用 BBQ 来处理后台堆栈。

一切正常,除了在用户首次导航到页面时设置初始选择。我的代码被调用到 addClass('selected') 到正确的元素,但它就像代码运行时该元素实际上不可用。

请注意,我添加了调试调用 $('#category' + C).append('bite me'); 以向自己证明这不是样式表/CSS 的问题。

这是我的代码:

<script>
function historyCallback(e) {
var C = $.bbq.getState("category");
if (C != undefined && C != 0) {
// We've been navigated back to
$('#Descriptions').empty();
$.getJSON('/Jobs/GetJobDescriptions?' + 'JobCategory=' + C, function(descs) {
$.each(descs, function(index, description) {
$('#Descriptions').append('<h3><a href="/Jobs/ShowJob?JobID=' + description.ID + '">' + description.JobTitle + '</a></h3>');
$('#Descriptions').append('<p>' + description.JobSummary + '</p>');
$('#Descriptions').append('<p><a href="/Jobs/ShowJob?JobID=' + description.ID + '">Read more...</a></p>');
});
});
$('a.jobcat').removeClass('selected');
$('#category' + C).addClass('selected');
$('#category' + C).append('bite me');
}
else { // category not specified so reset the page
$.bbq.pushState({ category: 3 },2);
}
}

function loadCategories() {
$.getJSON('/Jobs/GetCategories', function(data) {
var categories = data;
$.each(categories, function(index, category) {
addCategory(category.ID, category.CategoryName);
});
});
}

function addCategory(CatID, Name) {
$('#Categories').append('<p><a class="jobcat" id="category' + CatID + '">' + Name + '</a></p>');
$('#category' + CatID).click(function(event) {
$.bbq.pushState({ category: CatID }, 2); // merge_mode=2 means wipe out
});
}

$(document).ready(function () {
$(window).bind("hashchange", historyCallback); // needed for bbq plugin to work
loadCategories();
historyCallback();
});
</script>

第一次通过historyCallback,直接从$(document).ready调用,C未定义,因此else 语句执行 $.bbq.pushState({ category: 3 },2); 将 #has 设置为 category=3 这是我的默认类别。

这会导致再次调用 historyCallback,这次使用 C == 3if 子句末尾的三行无效:

$('a.jobcat').removeClass('selected');
$('#category' + C).addClass('selected');
$('#category' + C).append('bite me');

请注意,当我点击一个类别时,这些行确实会按预期工作。

似乎在 loadCategories() 中创建的 #category anchor 在这段代码运行时对于 jQuery/DOM/whatever 尚不可用。

我需要某种延迟或某种东西吗?我错过了什么?

非常感谢。

最佳答案

它不可用,因为 getJSON 函数异步运行。 getJSON 回调发生在 json 数据从服务器到达之后。

不要使用延迟。什么可能效果更好:

  1. 将类别选择放入回调中。
  2. 在加载类别时触发自定义事件,然后绑定(bind)一个事件监听器,之后进行选择。

关于javascript - 在 $(document).ready 期间无法更改在 $(document).ready 期间添加的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7814810/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com