2014-03-03 30 views
0

我是新來的,請原諒所有初學者的錯誤。當通過AJAX鏈接加載時,Jquery Document.ready

我正在學習jQuery(v1.9.1)以及使用jQuery Mobile(v1.3.1)。我在使用AJAX鏈接和javascript時遇到兩個問題:

1)當我通過jqm提供的默認AJAX鏈接方法鏈接頁面時,我失去了在後續頁面上運行任何新加載的javascript的能力。即當我從去page1.php中以使page2.php,我可以執行JavaScript的類似下面的東西,即(此代碼是在使page2.php):

<script> 
$(document).ready(function(){ 
    $('#form_field_email').focus(); 
}); 

</script> 

通過一堆的問題在這裏瀏覽後,我相信它是因爲初始頁面加載後沒有評估新腳本。因此,我嘗試將所有代碼移動到我在page1.php上加載的.js文件中。但有時我想觸發頁面加載操作(如上所述)。

有沒有什麼辦法可以實現這一點,而不使用eval函數?

2)類似的說明,如果page1.php上的DIV的id是'messageBox',但是如果我在page2.php上使用相同的id作爲另一個DIV,我將失去控制新繪製的能力因爲JavaScript仍然指向不再可見的舊DIV。

$('#messageBox').show(); 

有沒有辦法使用相同的名稱,但仍然能夠指向當前頁面上的元素。

謝謝你的幫助。

+1

您不應該在文檔中擁有相同'id'的兩個元素。如果您要添加新頁面中的元素,而不是從DOM中刪除舊元素,那麼您應該選擇一個新的「id」。 –

+0

另外,document.ready事件僅觸發一次,並且在瀏覽器完成呈現頁面後發生。您應該檢查jquery mobile的文檔,並且肯定會有一種方法可以使用回調或通過promise來傳遞成功函數。一旦ajax導航完成,該成功函數將被執行。 –

+0

當使用_Single頁面model_時,您應該將其他頁面的任何JS放入'data-role =「page」'div內。 Ajax僅加載div並忽略其他任何內容(頭部和身體中的其他元素)。 – Omar

回答

0

你應該做的是將ajax加載到ajax調用的成功回調後放置需要運行的代碼。

$.ajax({ 
    url: 'http://example.com', 
    success: function() { 
    //do something when call completes successfully 
    } 
); 
相關問題