我已經實現了一個頁面,其中包含一個選項列表(作業類別),單擊時應顯示數據(作業說明)。我正在使用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 == 3
。三條線在if
條款的到底有沒有效果:
$('a.jobcat').removeClass('selected');
$('#category' + C).addClass('selected');
$('#category' + C).append('bite me');
注意這些線做的工作如預期,當我點擊一個類別。
好像在loadCategories()
創建#category
錨尚未公佈將jQuery/DOM /時運行此代碼什麼的。
我需要某種延遲礦石嗎?我錯過了什麼?
謝謝了。
獲勝者!我忘了'.getJSON'創建了一個異步委託。移動調用'historyCallback'向右'$。每個後{}'的'聲明固定loadCategories'它。我愛你StackExchange! – tig
當然不是幾乎肯定但明確。在AJAX中的回調將永遠不會在'historyCallback'調用之前運行。 – Guffa