0

JQuery Cycle プラグイン (別のサイト全体のカスタム js ファイルで属性が定義されている) を使用して、フォームの 2 つのページ (テーブルで区切られている) を切り替えています。各ページには、そのページのコントロール用の独自の検証グループがあります。最初のページには「次へ」ボタンがあり、これを手動でクリックすると、最初の検証グループのページ検証が開始されます。失敗した場合は、ユーザーが情報を修正するためのツール ヒントが表示されます。検証が成功すると、cycle next コマンドが呼び出されます。

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

2 番目のページでは、コントロールは送信ボタンのある 2 番目の検証グループにグループ化されます。送信ボタンがクリックされると、サーバー側の検証がトリガーされ、失敗した場合はポストバックでページがリロードされます。2 番目のページが失敗した場合を除いて、これはすべて機能します。フォームを 2 番目のページにとどめておきます。したがって、フォームの 2 ページ目の検証に失敗したために Web ページがリロードされた場合は、開始スライドをフォームの 2 ページ目に設定するか、それが不可能な場合は、少なくともサイクルの次のコマンドをトリガーする必要があります。

開始スライドをフォームの 2 ページ目に設定することはできないようです。これは、別の js ファイルに設定されているサイクル関数の他の定義済み属性を上書きするためです。

では、送信ボタンがクリックされたときに 2 番目の検証グループが失敗したかどうかに基づいて、ポストバック ページの読み込み時に 2 番目のスライドに進む方法を知っている人はいますか? または、ビューステートなどを使用して別のことをする必要がありますか?

申し訳ありませんが、これは長々とした質問です。明確で混乱しないことを願っています。ありがとうございました

4

1 に答える 1

1

ページが読み込まれたときに2番目のスライドに移動する必要があることがわかっている場合は、次のようにすることができます。

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名前の競合を避けるために、アプリケーションがすでに使用しているグローバル名前空間のプレースホルダーとして使用しています。1つのページで複数のサイクルインスタンスを処理する必要がある場合は、次のよう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 に答える