通常のリクエスト (非 ajax) でページを開くと、すべて正常に動作します。しかし、そのフォームを ajax でロードすると、そのフォームのクライアント検証が機能しません。
フォームジェネレーターは古典的な gii 生成のものです:
$form = $this->beginWidget('CActiveForm', array(
'id'=>'cat-form',
'enableAjaxValidation'=>true,
'action' => ...,
'clientOptions'=>array('validateOnSubmit'=>true),
)
);
// - form inputs go here -
$this->endWidget();
Ajax の読み込みは次のように行われます。
$.get(page, function(formHtml) {
$('#content').html(formHtml);
});
processOutput = true
javascript を出力するために、renderPartial を で呼び出す必要がありました。ウィジェットで生成された JavaScript は次のようになります。
$('#cat-form').yiiactiveform({'validateOnSubmit':true,'attributes':[...]});
$('#cat-form')
選択が完了すると、返される jQuery オブジェクトが空である、つまりフォームがまだ存在しないという事実に問題を突き止めました。
Yii で ajax がロードされたコンテンツのクライアント検証を適切に追加するにはどうすればよいですか?
私は愚かで、このために 4 時間を無駄にしました。
var slider = $('.slider');
var slide = $('<div class="slide">').html(resp); // facepalm
// few lines later..
slider.append(slide);
そのため、フォームがまだページに追加されていない一時的な要素のみにあるときにスクリプトが実行されました。したがって、 は$('#form')
何も見つかりませんでした。