2017-07-25 85 views
0

我有一個填充了這是工作的一個完美$ .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我。就緒()函數的工作。

Cheers Jeff

+2

「準備就緒」處理程序中的代碼在頁面完成時觸發。 「click」處理程序中的代碼僅在您點擊鼠標時觸發。你的'.getJSON()'是異步的,所以如果頁面在響應返回之前完成,第一個將不起作用。 – Pointy

+1

什麼是數據?寫入DOM的內容是從JSON中生成的#one,#two,#third,#four元素嗎? – Bergi

+0

數據變量是在查詢字符串中傳遞給頁面的內容,並且是從JSON文件將元素寫入到DOM中。 – Jeff

回答

0

當你的dom頁面被加載時,ready事件被激發。

你的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); 
}); 
+0

非常感謝,我有一些想法,這是與DOM有關,但不確定的解決方案,它完美的作品:) – Jeff

0

$(document).ready()不等待您的異步調用($.getJSON())來完成的,所以已填充頁面之前準備事件被觸發,你要處理的元素還不存在。

當你硬編碼工作,因爲它沒有等待異步請求的數據來完成和頁面被立即填充。

最簡單的解決方法是調用頁面已被用於$.getJSON()調用回調函數填充之後的事件處理函數。希望你在回調函數中已經有了一些機制來確保在ready事件被觸發前,如果請求完成,它不會填充頁面。

相關問題