Skip to content

Commit

Permalink
Fixes yiisoft#14039, fixes yiisoft#16636: Fixed validation for disabl…
Browse files Browse the repository at this point in the history
…ed inputs
  • Loading branch information
s1lver authored and samdark committed Oct 18, 2018
1 parent 7c76696 commit cfe0bf5
Show file tree
Hide file tree
Showing 4 changed files with 64 additions and 3 deletions.
1 change: 1 addition & 0 deletions framework/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
6 changes: 3 additions & 3 deletions framework/assets/yii.activeForm.js
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down Expand Up @@ -489,7 +489,6 @@
updateInput($(this), attribute, msg);
}
}

};

var watchAttribute = function ($form, attribute) {
Expand Down Expand Up @@ -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);
}
});
Expand Down
34 changes: 34 additions & 0 deletions tests/js/data/yii.activeForm.html
Original file line number Diff line number Diff line change
@@ -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 changes: 26 additions & 0 deletions tests/js/tests/yii.activeForm.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -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 () {
Expand Down

0 comments on commit cfe0bf5

Please sign in to comment.