3月
12
2012

[jQuery]form.submit()できない原因


medium_880467001

すごくハマったのでメモ。

CakePHPでフォームのPOSTデータをコントローラで受ける場合、bakeのコードは

if (!empty($this->data)) {
	// POSTされた場合の処理
}

こうなっていますが、フォームのデフォルト値をコントローラで設定したり、フォームのsubmitボタンごとに処理を分けたい時などのために、僕は次のようにPOSTの判定を行なっています。

ビュー

$this->Form->create();
$this->Form->input("janken", array("options" => array(
	"1" => "グー",
	"2" => "チョキ",
	"3" => "パー",
)));
// ちょっと変な例ですが
$this->Form->submit("じゃんけん", array("name" => "submit"));
$this->Form->submit("過去の戦績", array("name" => "search"));
$this->Form->submit("戦績の消去", array("name" => "clear"));
$this->Form->end();

コントローラ

if (isset($this->params['form']['submit'])) {
	// submitが押された場合の処理
} elseif (isset($this->params['form']['search'])) {
	// searchが押された場合の処理
} elseif (isset($this->params['form']['clear'])) {
	// clearが押された場合の処理
} else {
	// おまけ。フォームの初期値
	$this->data['Model名']['janken'] = 1;
}

通常これ自体は問題ないと思うのですが・・・
今回ハマったのはこのフォームをjQuery(javascript)で送信しようと思ったら出来なかったことなのです。

フォームにsubmitというnameの要素があるとsubmit()が効かない

javascriptでsubmitできない?」を見てわかったのですが、フォームにsubmitというnameを持つ要素があるとそちらを参照してしまうために、submit()が効かないようです。

別の名前searchなどでは問題が無いので、今後はsubmitという名前を使わないように気を付けないと。少なくともjavascriptで送信したい場合はσ(^_^; )
一応ソースのサンプルです。

<?PHP echo $this->Html->scriptStart(array("inline" => false)); ?>
$(function(){
	// じゃんけんが変更されたら
	$("#jankenのID").change(function(){
		$("#フォームのID").submit();
	});
});
<?PHP echo $this->Html->scriptEnd(); ?>
$this->Form->create();
$this->Form->input("janken", array("options" => array(
	"1" => "グー",
	"2" => "チョキ",
	"3" => "パー",
)));
// ちょっと変な例ですが
$this->Form->submit("じゃんけん", array("name" => "create"));
$this->Form->submit("過去の戦績", array("name" => "search"));
$this->Form->submit("戦績を消去", array("name" => "clear"));
$this->Form->end();

これでOK。

Share

WEB案件のご相談はお気軽にご連絡ください
このブログに書かれている内容で、やってみたいけど技術が・・・とお悩みの方がいらっしゃいましたらお気軽にご相談ください。

ただいま繁忙につき、少し遅めの納期をお伝えしております。 差し迫った納期限での対応が難しいので、期限に余裕のある場合のみご相談いただけたら幸いです。

» お申し込みフォーム

▼Advertisement

Written by suzuki in: メモ | タグ: , ,

コメントはまだありません

Comments are closed.

RSS feed for comments on this post.


| I have been indebted to Aeros Theme. |