Skip to content

Commit ffd3d76

Browse files
committed
MAGETWO-57683: [Backport] Checkout Agreement validation is broken on payment method change #6224
1 parent 87046fa commit ffd3d76

File tree

3 files changed

+16
-27
lines changed

3 files changed

+16
-27
lines changed

app/code/Magento/CheckoutAgreements/view/frontend/web/js/model/agreement-validator.js

Lines changed: 4 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,8 @@ define(
1212
function ($) {
1313
'use strict';
1414
var checkoutConfig = window.checkoutConfig,
15-
agreementsConfig = checkoutConfig ? checkoutConfig.checkoutAgreements : {};
16-
17-
var agreementsInputPath = '.payment-method._active div.checkout-agreements input';
15+
agreementsConfig = checkoutConfig ? checkoutConfig.checkoutAgreements : {},
16+
agreementsInputPath = '.payment-method._active div.checkout-agreements input';
1817

1918
return {
2019
/**
@@ -23,26 +22,11 @@ define(
2322
* @returns {boolean}
2423
*/
2524
validate: function() {
26-
if (!agreementsConfig.isEnabled) {
27-
return true;
28-
}
29-
30-
if ($(agreementsInputPath).length == 0) {
25+
if (!agreementsConfig.isEnabled || $(agreementsInputPath).length == 0) {
3126
return true;
3227
}
3328

34-
return $('#co-payment-form').validate({
35-
errorClass: 'mage-error',
36-
errorElement: 'div',
37-
meta: 'validate',
38-
errorPlacement: function (error, element) {
39-
var errorPlacement = element;
40-
if (element.is(':checkbox') || element.is(':radio')) {
41-
errorPlacement = element.siblings('label').last();
42-
}
43-
errorPlacement.after(error);
44-
}
45-
}).element(agreementsInputPath);
29+
return $.validator.validateSingleElement(agreementsInputPath, {errorElement: 'div'});
4630
}
4731
}
4832
}

app/code/Magento/CheckoutAgreements/view/frontend/web/template/checkout/checkout-agreements.html

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,13 @@
88
<div class="checkout-agreements" data-bind="visible: isVisible">
99
<!-- ko foreach: agreements -->
1010
<!-- ko if: ($parent.isAgreementRequired($data)) -->
11-
<div class="checkout-agreement">
12-
<input type="checkbox"
11+
<div class="checkout-agreement required">
12+
<input type="checkbox" class="required-entry"
1313
data-bind="attr: {
1414
'id': 'agreement_' + agreementId,
1515
'name': 'agreement[' + agreementId + ']',
1616
'value': agreementId
17-
}"
18-
data-validate="{required:true}" />
17+
}"/>
1918
<label data-bind="attr: {'for': 'agreement_' + agreementId}">
2019
<button type="button"
2120
class="action action-show"

lib/web/mage/validation.js

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1441,17 +1441,19 @@
14411441
* Validate single element.
14421442
*
14431443
* @param {Element} element
1444+
* @param {Object} config
14441445
* @returns {*}
14451446
*/
1446-
$.validator.validateSingleElement = function (element) {
1447+
$.validator.validateSingleElement = function (element, config) {
14471448
var errors = {},
14481449
valid = true,
14491450
validateConfig = {
14501451
errorElement: 'label',
14511452
ignore: '.ignore-validate'
14521453
},
1453-
form, validator, classes;
1454+
form, validator, classes, elementValue;
14541455

1456+
$.extend(validateConfig, config);
14551457
element = $(element).not(validateConfig.ignore);
14561458

14571459
if (!element.length) {
@@ -1475,7 +1477,11 @@
14751477
validator.toShow = validator.toHide = $([]);
14761478

14771479
$.each(classes, $.proxy(function (i, className) {
1478-
if (this.methods[className] && !this.methods[className](element.val(), element.get(0))) {
1480+
elementValue = element.val();
1481+
if (element.is(':checkbox') || element.is(':radio')) {
1482+
elementValue = element.is(':checked') || null;
1483+
}
1484+
if (this.methods[className] && !this.methods[className](elementValue, element.get(0))) {
14791485
valid = false;
14801486
errors[element.get(0).name] = this.messages[className];
14811487
validator.invalid[element.get(0).name] = true;

0 commit comments

Comments
 (0)