Я нашел этот вопрос, и у меня возникла та же проблема, поэтому я решил опубликовать свое решение.
Мне нужно было отключить проверку clientSide для определенных полей, когда флажок был отмечен / снят с помощью Yii.
Обратите внимание, что мое решение использует виджет $ form CActiveForm.
Итак, формаcode:
<?php
$form=$this->beginWidget('CActiveForm', array(
'id'=>'my-form',
'enableAjaxValidation'=>false,
));
?>
<input type="checkbox" name="YourCheckbox" id="Your-Checkbox" value="1" />
<?php
echo $form->labelEx($yourModel,'FirstName');
echo $form->textField($yourModel,'FirstName');
echo $form->error($yourModel,'FirstName');
echo $form->labelEx($yourModel,'LastName');
echo $form->textField($yourModel,'LastName');
echo $form->error($yourModel,'LastName');
?>
Теперь мы отображаем функции javascript, которые отключают проверку для каждого поля, которое вы укажете:
function enableFieldsValidation(form, model, fieldName) {
// Restore validation for model attributes
$.each(form.data('settings').attributes, function (i, attribute) {
if (attribute.model == model && attribute.id == (model + '_' + fieldName))
{
if (attribute.hasOwnProperty('disabledClientValidation')) {
// Restore validation function
attribute.clientValidation = attribute.disabledClientValidation;
delete attribute.disabledClientValidation;
// Restore sucess css class
attribute.successCssClass = attribute.disabledSuccessCssClass;
delete attribute.disabledSuccessCssClass;
}
}
});
}
function disableFieldsValidation(form, model, fieldName) {
$.each(form.data('settings').attributes, function (i, attribute) {
if (attribute.model == model && attribute.id == (model + '_' + fieldName))
{
if (!attribute.hasOwnProperty('disabledClientValidation')) {
// Remove validation function
attribute.disabledClientValidation = attribute.clientValidation;
delete attribute.clientValidation;
// Reset style of elements
$.fn.yiiactiveform.getInputContainer(attribute, form).removeClass(
attribute.validatingCssClass + ' ' +
attribute.errorCssClass + ' ' +
attribute.successCssClass
);
// Reset validation status
attribute.status = 2;
// Hide error messages
form.find('#' + attribute.errorID).toggle(false);
// Dont make it 'green' when validation is called
attribute.disabledSuccessCssClass = attribute.successCssClass;
attribute.successCssClass = '';
}
}
});
}
Когда у вас есть эти функции в вашем файле JS, вы можете использовать jQueryпроверить, был ли установлен флажок.Если он был проверен, он включит проверку, а если нет -
$('#YourCheckbox').click(function() {
if ($(this).is(':checked'))
{
enableFieldsValidation($('#my-form'), 'YourModel', 'FirstName');
//enableFieldsValidation($('#my-form'), 'YourModel', 'LastName');
}
else
{
disableFieldsValidation($('#my-form'), 'YourModel', 'FirstName');
//disableFieldsValidation($('#my-form'), 'YourModel', 'LastName');
}
});