2011-11-22 69 views
2

我有一個功能,無論是通過標準頁面加載還是通過jQuery Mobile的AJAX導航機制,我都需要在顯示頁面時調用它。目前,我的代碼沒有問題,但我覺得有一個更優雅的方式。有沒有更好的方法來附加到jQuery Mobile中的pageshow?

在我頁面的頁腳中,我有一些代碼附加到該頁面的pageshow事件。在pageshow上,它將關注文本框,執行警報(用於測試),然後從pageshow事件中解除綁定。如果我沒有解除綁定,那麼如果我離開頁面然後返回到該頁面,事件將會啓動兩次。不是一個真正的大問題的焦點事件,但如果你嘗試這種與提醒你看到他們開始堆起來:P

var focusOnQuantity = function() { 
    $("#quantity").focus(); 
    alert('test'); 
    $('body').undelegate('#reportProduction', 'pageshow', focusOnQuantity); 
}; 

// Bind to this page's pageshow event when loaded via jQuery Mobile AJAX 
$('body').delegate('#reportProduction', 'pageshow', focusOnQuantity); 

我也有一個全球性的JS和裏面我有一個jQuery的保護功能在哪裏在直接加載此頁面的情況下進行相同的焦點調用。

(function ($) { 
    $(function() { 
     // For direct page load 
     $("#quantity").focus(); 
    }); 
})(jQuery); 

我怎樣才能封裝代碼到1塊,使得它將在pageload對AJAX導航工作的標準導航和pageshow?預先感謝您的幫助。

回答

4

如果你只是綁定到pageshow事件將火初始負載以及每個後續pageshow

$(document).delegate('#reportProduction', 'pageshow', focusOnQuantity); 

如果這個代碼是在全球範圍內運行它僅應每pageshow事件運行一次在#reportProduction頁面上。

這裏是將上述溶液的的jsfiddle:我已經改變了「的onLoad」偏好「沒有包裹物(體)」,這意味着該代碼附加到body元件的端部,而無需使用http://jsfiddle.net/jasper/DHeva/(通知$(function() {...});)。

+0

因此,我需要在加載的「主」頁面上執行此操作...有沒有辦法讓我在子頁面中包含腳本? –

+0

從我的結尾看來,綁定到'pageshow'事件的代碼似乎嵌套在一些其他事件處理程序中,這些事件處理程序會週期性地調用,以便綁定到'pageshow'事件添加。我可以通過更完整的代碼示例或頁面鏈接來確認。 – Jasper

+0

我不知道問題是什麼,它現在正在工作......基本上我只是將代碼移動到正在加載的子頁面的頁腳,現在一切正在運行。我做的唯一不同,我能想到的是我從緩存中刪除頁面: $('body')。delegate('div.ui-page','pagehide',function() {( $)(this).remove(); }); –

相關問題