的方式我解決這個問題的方法是創建場景並在客戶端動態更新它們,而無需loadi通過AJAX重新整個表單。
在model.php創建方案類似以下內容: -
...
public function rules(){
return array(
...
array('license_plate', 'required', 'on'=>'car'),
array('some_column', 'some_validation', 'on'=>'bike')
...
);
}
...
現在你詢問是否可以驗證用戶的選擇輸入而改變。假設用戶有從選擇(汽車或自行車)選擇,具有值1車,具有值2.更新控制器這樣的創建操作自行車: -
public function actionCreate(){
$model = new Vehicle();
if(isset($_POST['ajax']) && $_POST['ajax'] == 'FORM_ID'){
if($_POST['Vehicle']['type'] == 1)
$model->setScenario('car');
else
$model->setScenario('bike');
//You can have n-number of scenarios here based upon your application.
}
$this->performAjaxValidation($model);
if(isset($_POST['Vehicle']))
$model->attributes = $_POST['Vehicle'];
if($model->type == 1)
$model->setScenario('car');
else
$model->setScenario('bike');
//You can have n-number of scenarios here based upon your application.
}
現在,而這樣做我面臨的一個即使情況發生變化,錯誤消息的問題也不會消失。與窗體的ID,並且下拉的ID「DROPDOWN_ID」
(包括在您的視圖文件這個腳本)
$(document).on('change', '#DROPDOWN_ID', function(e){
$(':input','#FORM_ID')
.not('#DROPDOWN_ID')
.val('')
.removeAttr('checked')
.removeAttr('selected');
$('.help-block, .error').hide(); //NOTE 1.0
var settings = $('#FORM_ID').data('settings');
$.each(settings.attributes, function() {
this.status = 2;
});
var form = $("#FORM_ID");
form.data('settings', settings);
$.fn.yiiactiveform.validate(form, function (data) {
$.each(settings.attributes, function() {
$.fn.yiiactiveform.updateInput(this, data, $("#FORM_ID"));
});
});
});
請更換「FORM_ID」和 - :我解決了使用JavaScript這樣的問題驗證的選擇分別取決於您的表單。
注1.0說明:
我使用YiiBooster所以我所有的形式都在引導。驗證 我的表單中的錯誤有'幫助塊錯誤'類,請將 替換爲表單中用於顯示錯誤的類,以 正確隱藏它們。
參考文獻:
- Validating other fields on change of one field - Yii
- Changing scenarios on client side without loading the form again
我希望這可以解決此問題。
http://www.yiiframework.com/wiki/466/a-simple-way-to-get-yii-client-side-form-validation-run-when-submitting-by-ajax/您的要求是自定義一個。編寫一個自定義腳本是很好的。上面的鏈接可以幫助我們編寫這樣的腳本來驗證並在提交之前執行操作 – Jebin
這個有獎勵它...任何一個關心採取100代表?? – tinybyte
你的問題看起來很有趣但很難說沒有看到任何代碼 –