0

我正在使用 JQuery Cycle 插件(具有在单独的站点范围的自定义 js 文件中定义的属性)在表单的两个页面(由表格分隔)之间循环。每个页面都有自己的验证组,用于该页面上的控件。第一个页面有一个“下一步”按钮,单击该按钮会手动触发第一个验证组的页面验证。如果失败,则会显示工具提示以供用户更正信息。如果验证成功,则调用循环下一个命令。

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

在第二页上,控件被分组到带有提交按钮的第二个验证组中。单击提交按钮时,将触发服务器端验证,如果失败,页面将在回发时重新加载。所有这些都有效,除非第二页失败,我希望表单保留在第二页上。因此,如果由于表单的第二页无法验证而重新加载网页,我需要将起始幻灯片设置为表单的第二页,或者如果这不可能,至少触发循环下一个命令。

似乎我不能将起始幻灯片设置为表单的第二页,因为这将覆盖在单独的 js 文件中设置的循环函数的其他定义属性。

那么有没有人知道如何根据单击提交按钮时第二个验证组是否失败来推进回发页面加载的第二张幻灯片?或者我应该使用视图状态或其他东西做一些不同的事情吗?

抱歉,这是一个冗长的问题。希望它清楚而不是混乱。谢谢

4

1 回答 1

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));

您只需要安排 forinit成为一个空对象文字,除非您需要设置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用作您的应用程序已经使用的任何全局命名空间的占位符,以避免名称冲突。如果您必须在单个页面上处理多个循环实例,那么您需要page_cycle_opts按元素 ID 进行索引,例如:

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
    ));
});

基本思想是将全局配置选项视为一组默认值,然后通过明确定义和记录的机制允许特定于页面的覆盖。

对一个冗长的问题的冗长回答。希望它清楚而不是混乱。

于 2011-01-06T04:55:22.817 回答