2007/12/18 火曜日

cakePHPのAjaxヘルパーがGETメソッドを呼ぶ前に検査を行なう

このエントリをはてなブックマークに追加cakePHPAjax若GET<純若九罎祉茵のはてなブックマーク被リンク数
Filed under: PHP, cakePHP — akky @ 19:08:48

AjaxヘルパーのobserveFormを用いた更新を行なう前に、フォームの値を検査して画面の更新を制御したい時の方法です。具体的には、フォームの値がない(空白)の場合は更新をしたくなかった。

実装はHTMLのformタグのonSubmitイベントでfalseを返却してsubmitを中断させる動きのcakePHP版。view部分のソースがこれで、

   $opt = array(
        "url" => "/hogeapli/result", // 反映するURL
        "update" => "result", // 反映先のdivタグのID
        "frequency" => "1", // 値変更の監視間隔
        "with" => "document.searchForm.serialize()", // 送信するフォーム
        "condition" => "searchFormSubmit()" // 検査を行なうJavaScriptのメソッド
      ); // 送信するフォーム
  echo $ajax->observeForm("searchForm",$opt);

optionのconditionに検査を実装したJavaScriptの関数を指定しておく。JavaScriptでは画面を更新したいときはtrueを返し、更新したくないときはfalseを返す実装をしておく。コードがこれ。

function searchFormSubmit(){
  var ret = false;
  for each( var e in document.forms.searchForm.elements ){
    if ( e.nodeName =="INPUT" ){
      if ( e.value != "" ){
        ret = true;
      }
    }
  }

  return ret;

こうすることで、フォーム内の値の変更を検知し、画面更新をする前に、JavaScriptのsearchFormSubmitが実行され、戻り値に従って更新の継続/中断を制御する。

次のページ »