cakePHPのAjaxヘルパーがGETメソッドを呼ぶ前に検査を行なう
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が実行され、戻り値に従って更新の継続/中断を制御する。
