YII版本:1.1.8
在使用YII的CActiveForm時
clientOptions屬性validateOnSubmit=true時
radioButtonList始終會提示當前字段不能爲空
解決方法:
修改jquery.yiiactiveform.js 文件
找到$.fn.yiiactiveform.validate方法
原代碼:
$.each(settings.attributes, function(){ var msg = []; if (this.clientValidation != undefined && (settings.submitting || this.status == 2 || this.status == 3)) { var value = $('#'+this.inputID, $form).val(); //原語句 this.clientValidation(value, msg, this); if (msg.length) { messages[this.id] = msg; } } if (this.enableAjaxValidation && !msg.length && (settings.submitting || this.status == 2 || this.status == 3)) needAjaxValidation = true; });
改爲:
$.each(settings.attributes, function(){
var msg = [];
if (this.clientValidation != undefined && (settings.submitting || this.status == 2 || this.status == 3)) {
/* yii radioButtonList驗證錯誤修復 by zhao.jingxian */
var type = $('input[name="'+this.name+'"]', $form).eq(1).attr('type');
if('radio' == type)
{
var value = $('input[name="'+this.name+'"]:checked', $form).val();
}else{
var value = $('#'+this.inputID, $form).val(); //原語句
}
/* end */
this.clientValidation(value, msg, this);
if (msg.length) {
messages[this.id] = msg;
}
}
if (this.enableAjaxValidation && !msg.length && (settings.submitting || this.status == 2 || this.status == 3))
needAjaxValidation = true;
});
錯誤原因:cactiveform在生成radioButtonList時,ID會根據當前的屬性數量生成id_1,id_2...等,所以var value = $('#'+this.inputID, $form).val();獲取不到準確的值。
求完美解決方案。。。