2011-01-05 36 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

相关问题