2011-01-05 39 views
0

我正在使用JQuery循環插件(在單獨的站點範圍自定義js文件中定義屬性)在兩個頁面之間循環(由表格分隔)的形式。每個頁面都有自己的驗證組,用於該頁面上的控件。第一頁有一個「下一步」按鈕,手動點擊會觸發第一個驗證組的頁面驗證。如果失敗,則顯示工具提示以供用戶更正信息。如果驗證成功,則調用cycle next命令。如果驗證組無效,JQuery循環插件需要循環到下一張幻燈片

$('#request-information').cycle('next'); 

在第二頁上,控件按提交按鈕分組在第二個驗證組中。當點擊提交按鈕時,觸發服務器端驗證,如果失敗,則頁面在回發時重新加載。所有這些工作,除非第二頁失敗,我希望窗體留在第二頁。因此,如果因爲表單的第二頁無法驗證而重新加載網頁,我需要將啓動幻燈片設置爲表單的第二頁,或者至少不能觸發循環下一個命令。

似乎我不能將startingslide設置爲表單的第二頁,因爲它會覆蓋在單獨的js文件中設置的循環函數的其他已定義屬性。

所以沒有人知道如何提前回發頁面加載的第二張幻燈片,基於第二個驗證組是否在點擊提交按鈕時失敗?或者我應該使用視圖狀態或其他方式做一些不同的事情?

對不起,這是一個漫長的問題。希望它清晰而不混亂。 謝謝

回答

1

如果你知道你需要去第二滑時,你的頁面加載,那麼你可以做這樣的事情:

var init = { startingSlide: 1 }; // i.e. second slide, the indices are zero-based 
$('whatever').cycle($.extend(init, the_name_of_your_global_default_options)); 

你只需要安排init是一個除了需要設置startingSlide時,空對象字面值。如果.cycle()位於頁面外某處,則可以爲頁面特定選項和$.extend()預留一個變量,其中.cycle()被調用。例如,在你的頁面,你可以做這樣的事情:

app_name_space.page_cycle_opts = { startingSlide: 1 }; 

,然後JavaScript文件中的路要走被綁定循環的東西:

app_name_space.page_cycle_opts = app_name_space.page_cycle_opts || { }; 
$('whatever').cycle($.extend(app_name_space.page_cycle_opts, default_options)); 

我使用app_name_space作爲您的應用程序已在使用的任何全局名稱空間的佔位符,以避免名稱衝突。如果你不得不處理一個頁面上的多個週期的實例,那麼你會通過元素ID要建立索引page_cycle_opts,例如:

app_name_space.page_cycle_opts['X'] = { startingSlide: 1 }; 

然後路要走別處:

$('whatever').each(function() { 
    $(this).cycle($.extend(
     app_name_space.page_cycle_opts[this.id] || { }, 
     default_options 
    )); 
}); 

基本想法是將全局配置選項視爲一組默認設置,然後通過定義明確的文檔化機制來允許頁面特定的覆蓋。

一個漫長的囉嗦的回答一個漫長的問題。希望它清晰而不混亂。

+0

哇,非常感謝這個偉大的答案。感謝您花時間。它非常清楚,我現在擺弄這個。這對我來說很有用。感謝您向我介紹$ .extend函數。我知道必須有一種方法來添加屬性,只是不知道如何。 – Dmase05 2011-01-06 16:53:04

+0

@ DMase05:順便說一句,'$ .extend()'會修改它的第一個參數,因此如果這很重要,應該提供一個空對象作爲第一個參數:'x = $ .extend({},a,b,...) ;'。 jQuery有許多人們似乎不知道的小工具:http://api.jquery.com/category/utilities/。乾杯。 – 2011-01-06 19:16:36

相關問題