Browse Source

Fixes #14039, fixes #16636: Fixed validation for disabled inputs

tags/2.0.16
Evgeniy Moiseenko 6 years ago committed by Alexander Makarov
parent
commit
cfe0bf5cf1
  1. 1
      framework/CHANGELOG.md
  2. 6
      framework/assets/yii.activeForm.js
  3. 34
      tests/js/data/yii.activeForm.html
  4. 26
      tests/js/tests/yii.activeForm.test.js

1
framework/CHANGELOG.md

@ -4,6 +4,7 @@ Yii Framework 2 Change Log
2.0.16 under development
------------------------
- Bug #14039, #16636: Fixed validation for disabled inputs (s1lver, omzy83)
- Bug #16425: Check for additional values for disabled confirm dialog (Alex-Code, s1lver)
- Enh #14367: In `yii\db\mysql\QueryBuilder` added support fractional seconds for time types for MySQL >= 5.6.4 (konstantin-vl)
- Bug #16766: `yii\filters\ContentNegotiator` was not setting `Vary` header to inform cache recipients (koteq, cebe, samdark)

6
framework/assets/yii.activeForm.js

@ -325,7 +325,7 @@
// client-side validation
$.each(data.attributes, function () {
this.$form = $form;
if (!$(this.input).is(":disabled")) {
if (!findInput($form, this).is(":disabled")) {
this.cancelled = false;
// perform validation only if the form is being submitted or if an attribute is pending validation
if (data.submitting || this.status === 2 || this.status === 3) {
@ -489,7 +489,6 @@
updateInput($(this), attribute, msg);
}
}
};
var watchAttribute = function ($form, attribute) {
@ -625,8 +624,9 @@
if (submitting) {
var errorAttributes = [];
var $input = findInput($form, this);
$.each(data.attributes, function () {
if (!$(this.input).is(":disabled") && !this.cancelled && updateInput($form, this, messages)) {
if (!$input.is(":disabled") && !this.cancelled && updateInput($form, this, messages)) {
errorAttributes.push(this);
}
});

34
tests/js/data/yii.activeForm.html

@ -1,3 +1,37 @@
<form id="w0">
<input id="name" type="text" name="name" value="">
</form>
<form id="w1">
<fieldset disabled="">
<div class="form-group required">
<label class="control-label" for="test_text">Test text</label>
<input type="text" id="test_text" class="form-control" name="Test[text]" aria-required="true">
<div class="help-block"></div>
</div>
</fieldset>
<fieldset disabled="">
<div class="form-group required">
<label class="control-label">Test radio</label>
<input type="hidden" name="Test[radio]" value="">
<div id="test_radio" aria-required="true">
<label><input type="radio" name="Test[radio]" value="1"> Test1</label>
<label><input type="radio" name="Test[radio]" value="0"> Test2</label>
</div>
<div class="help-block"></div>
</div>
</fieldset>
<fieldset disabled="">
<div class="form-group required">
<label class="control-label">Test checkbox</label>
<input type="hidden" name="Test[checkbox]" value="">
<div id="test_checkbox" aria-required="true">
<label><input type="checkbox" name="Test[checkbox][]" value="1"> Test1</label>
<label><input type="checkbox" name="Test[checkbox][]" value="0"> Test2</label>
</div>
<div class="help-block"></div>
</div>
</fieldset>
</form>

26
tests/js/tests/yii.activeForm.test.js

@ -78,6 +78,32 @@ describe('yii.activeForm', function () {
assert.isTrue(afterValidateSpy.calledOnce);
});
});
describe('with disabled fields', function () {
var inputTypes = {
test_radio: 'radioList',
test_checkbox: 'checkboxList',
test_text: 'text input'
};
for (var key in inputTypes) {
if (inputTypes.hasOwnProperty(key)) {
(function () {
var inputId = key;
it(inputTypes[key] + ' disabled field', function () {
$activeForm = $('#w1');
$activeForm.yiiActiveForm({
id: inputId,
input: '#' + inputId
});
$activeForm.yiiActiveForm('validate');
assert.isFalse($activeForm.data('yiiActiveForm').validated);
});
})();
}
}
});
});
describe('resetForm method', function () {

Loading…
Cancel
Save