Плагин JQuery Cycle должен циклически переходить к следующему слайду поста назад, если группа проверки недействительна - PullRequest
0 голосов
/ 05 января 2011

Я использую плагин JQuery Cycle (с атрибутами, определенными в отдельном пользовательском js-файле для всего сайта) для переключения между двумя страницами (разделенными таблицами) формы. Каждая страница имеет свою собственную группу проверки для элементов управления на этой странице. На первой странице есть кнопка «Далее», которая при нажатии вручную запускает проверку страницы для первой группы проверки. В случае неудачи отображаются подсказки, чтобы пользователь мог исправить информацию. Если проверка прошла успешно, вызывается команда цикла next.

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

На второй странице элементы управления сгруппированы во вторую группу проверки с помощью кнопки отправки. При нажатии кнопки отправки запускается проверка на стороне сервера, и в случае неудачи страница перезагружается при обратной передаче. Все это работает, за исключением случаев, когда происходит сбой второй страницы, я хочу, чтобы форма оставалась на второй странице. Поэтому, если веб-страница перезагружена из-за того, что вторая страница формы не прошла проверку, мне нужно либо установить начальный слайд на вторую страницу формы, либо, если это невозможно, по крайней мере вызвать команду цикла next.

Не похоже, что я могу просто установить startingslide на вторую страницу формы, потому что это перезапишет другие определенные атрибуты функции цикла, которые установлены в отдельном файле js.

Так кто-нибудь знает, как перейти ко второму слайду при загрузке страницы обратной передачи, основываясь на том, не сработала ли вторая группа проверки при нажатии кнопки отправки? Или я должен делать что-то другое, используя viewstate или что-то еще?

Извините, это длинный вопрос. Надеюсь, это ясно и не смущает. Спасибо

1 Ответ

1 голос
/ 06 января 2011

Если вы знаете, что вам нужно перейти на второй слайд при загрузке страницы, вы можете сделать что-то вроде этого:

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 в качестве заполнителя для любого глобального пространства имен, которое ваше приложение уже использует, чтобы избежать конфликтов имен. Если вам приходилось иметь дело с несколькими экземплярами цикла на одной странице, то вам нужно индексировать 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
    ));
});

Основная идея состоит в том, чтобы рассматривать глобальные параметры конфигурации как набор значений по умолчанию, а затем разрешать переопределения для конкретной страницы через четко определенный и документированный механизм.

Длинный многословный ответ на длинный вопрос. Надеюсь, это ясно и не сбивает с толку.

...