首页 > 解决方案 > 在结帐字段国家/地区添加自定义验证

问题描述

我需要在可以使用的所有地方在国家/地区字段上添加验证。

对于注册或地址编辑,它工作正常,但在结帐时我尝试了几种方法,但没有任何效果。我想要在新的送货地址表单的字段上进行验证。

  1. 我在 js 文件中添加了我的验证countryValidation.js
    注册或编辑地址的相同脚本,它工作正常
define([
    'jquery',
    'jquery/ui',
    'mage/validation',
    'mage/translate',
    'domReady!'
], function($){
    'use strict';
    return function(validator) {
        $.validator.addMethod(
            "validate-country",
            function(value, element) {
                if (value === "FR") {
                    var zipValue = $('input[name="postcode"]').val();
                    if (zipValue) {
                        return !(zipValue.startsWith("97") || zipValue.startsWith("98"));
                    }
                }

                return true;
            },
            $.mage.__("You cannot choose France for DOM-TOM Zip Code")
        );
        return validator;
    }
});
  1. requirejs-config.js我在我的模块中注册了它:
var config = {
    config: {
        mixins: {
            'Magento_Ui/js/lib/validation/validator': {
                'Gone_Customer/js/countryValidation': true
            }
        }
    }
};
  1. 为了向结帐方法添加验证,我尝试了不同的方法
    -> 方法 A:使用插件
class AddCountryValidation
{
    public function afterProcess(
        \Magento\Checkout\Block\Checkout\LayoutProcessor $subject,
        array $jsLayout
    ) {
        // Country ID
        $jsLayout['components']['checkout']['children']['steps']['children']['shipping-step']['children']['shippingAddress']['children']['shipping-address-fieldset']['children']['country_id']['validation']['validate-country'] = true;

        return $jsLayout;
    }
}

-> 方法B:在属性中添加验证规则在属性
customer_eav_attributecountry_idvalidate_rules添加{"validate-country": true}

当我验证表单时,我应该有一个验证错误。

如果我遗漏了什么,你能告诉我吗?

标签: validationmagento2checkout

解决方案


请试试这个

define([
  'jquery',
  'jquery/validate'
], function($){
  'use strict';
  return function(validator) {
      validator.addRule(
          "validate-country",
          function(value) {
              if (value === "FR") {
                  var zipValue = $('input[name="postcode"]').val();
                  if (zipValue) {
                      return !(zipValue.startsWith("97") || zipValue.startsWith("98"));
                  }
              }
              return false;
          },
          $.mage.__("You cannot choose France for DOM-TOM Zip Code")
      );
      return validator;
  }
  });

我使用了return false,您可以根据需要进行修改。在2.2.2版本上测试


推荐阅读