1

目的:各行に人がいるテーブルと、チェックボックスをクリックするとフォームが送信されます。今のところ、チェックボックスごとに1つのフォームがあります。

( http://iufm-web.ujf-grenoble.fr/crip/images/extrait_tableau_dossiers.png )

私はcakephp 2.0でそれを管理しましたが、送信するたびにページ全体がリロードされます(何行?おそらく数百、最大は別の質問です)

私はそれを非常に反応的にしたいので、クリックされた行だけをリロードするために ajax を使用することを考えました。

Js->submit を使用しようとしましたが、チェックボックスと互換性がありません。

コントローラーのアクションによってページがリロードまたはリダイレクトされるため、各フォームのアクションに何を使用すればよいのでしょうか。

編集:私はデイブの提案に従い、フラグメントビュー(テーブルの行を埋める)で:

echo $this->Form->input('recu',array('type'=>'checkbox', 
                     'value'=>true, 
                     'id'=>'recu'.$ilignetot, 
                     'hiddenField'=>true, 
                     'div' =>false, 
                     'label' =>false, 
                      'checked'=>$user['User'['recu'], 
                 ))."\n";   

$this->Js->get('#recu'.$ilignetot)->event('change', 
    $this->Js->request(array(
        'controller'=>'users',
        'action'=>'admin_dossier_recu2'
        ), array(
        'update'=>'#'.$lineid,
        'async' => true,
        'method' => 'post',
        'dataExpression'=>true,
        'data'=> $this->Js->serializeForm(array(
            'isForm' => false,
            'inline' => true
            ))
        ))
    );

コントローラー アクション admin_dossier_recu2 で、フォームを保存し、次のように指定してフラグメントを返します。

      $this->layout = 'ajax';

ヒントをありがとう、私の以前の試みは間違っていました。残念ながら、私のソリューションは IE8 では機能しませんが、Firefox と chrome ではうまく機能します。これで、データが実際に保存されたことをユーザーに知らせる視覚効果が得られますが、おそらく別の質問をする必要があります。

4

1 に答える 1

1

javascriptsonchange()イベントを使用して、すべての ajax を実行する関数を呼び出します。

ajaxを実行する前に、変更されたチェックボックスがチェックされているかどうかを判断するロジックを実行することもできます...など.

于 2013-03-28T21:04:40.527 に答える