Автоматически возвращать опцию селектора автозаполнения как выбранную - PullRequest
0 голосов
/ 10 апреля 2020

Я использую плагин автозаполнения форм, который использует API Карт Google для автозаполнения формы оформления заказа WooCommerce. Одна загвоздка в том, что он не выбирает автоматически состояние в выпадающем списке. Если вы вручную нажмете на выпадающий список, вы увидите, что плагин выделил правильное состояние в опциях выпадающего меню, но он не вернет автоматически это состояние, выбранное в селекторе штата / округа. Это приводит к дальнейшему затруднению в том, что если вы затем вручную нажмете на выделенную опцию состояния, это состояние не будет заполняться как выбранное.

На рисунке я показываю, что делает код. Он не возвращает выбранную опцию, а затем, если вы щелкнете по раскрывающемуся списку, у него будет выделено состояние, но он не вернет его как выбранное.

enter image description here

Я посмотрел на JS для этого плагина, и я не вижу, в чем проблема, хотя это, вероятно, связано с billing_state. Есть ли способ заставить этот код возвращать выделенную опцию как выбранную, а не просто выделять ее?

var Cas_billing = Cas_billing || {},
    Cas_shipping = Cas_shipping || {};
if (Cas_billing.event = {}, Cas_shipping.event = {}, Cas_billing.method = {
        searchAddress: "",
        seprateIds: "",
        sugessions: "",
        streetNumber: "",
        formFields: {
            billing_address_1: "",
            billing_address_2: "",
            billing_city: "",
            billing_state: "",
            billing_postcode: "",
            billing_country: ""
        },
        formFieldsValue: {
            billing_address_1: "",
            billing_address_2: "",
            billing_city: "",
            billing_state: "",
            billing_postcode: "",
            billing_country: ""
        },
        component_form: "",
        initialize: function() {
            this.getseprateIds(), this.initFormFields(), this.sugessions = new google.maps.places.Autocomplete(document.getElementById("billing_address_1"), {
                types: ["geocode"]
            }), google.maps.event.addListener(this.sugessions, "place_changed", function() {
                Cas_billing.method.fillInAddress()
            });
            var e = document.getElementById("billing_address_1");
            null != e && e.addEventListener("focus", function() {
                Cas_billing.method.setCurrentCountry()
            }, !0);
            var s = document.getElementById("billing_country");
            null != s && s.addEventListener("change", function() {
                Cas_billing.method.setCurrentCountry()
            }, !0)
        },
        getseprateIds: function() {
            return document.getElementById("billing_address_1") ? (this.seprateIds = ":", ":") : (this.seprateIds = "_", "_")
        },
        initFormFields: function() {
            for (var e in this.formFields) this.formFields[e] = e;
            this.component_form = {
                street_number: ["billing_address_1", "short_name"],
                route: ["billing_address_1", "long_name"],
                locality: ["billing_city", "long_name"],
                administrative_area_level_1: ["billing_state", "short_name"],
                country: ["billing_country", "long_name"],
                postal_code: ["billing_postcode", "short_name"]
            }
        },
        fillInAddress: function() {
            this.clearFormValues(), this.sugessions.setFields(["address_components"]);
            var e = this.sugessions.getPlace();
            for (var s in this.resetForm(), e.address_components)
                for (var t in e.address_components[s].types)
                    for (var n in this.component_form) {
                        if (n == e.address_components[s].types[t]) {
                            "street_number" == n ? this.streetNumber = e.address_components[s].short_name : "KR" == document.getElementById("billing_country").value && (this.streetNumber = e.address_components[0].short_name, this.streetNumber += "," + e.address_components[1].long_name);
                            var i = this.component_form[n][1];
                            e.address_components[s].hasOwnProperty(i) && (this.formFieldsValue[this.component_form[n][0]] = e.address_components[s][i])
                        }
                    }
            this.appendStreetNumber(), this.fillForm(), $ = jQuery.noConflict(), $("#billing_state").trigger("change"), "undefined" != typeof FireCheckout && checkout.update(checkout.urls.billing_address)
        },
        clearFormValues: function() {
            for (var e in this.formFieldsValue) this.formFieldsValue[e] = ""
        },
        appendStreetNumber: function() {
            "" != this.streetNumber && (this.formFieldsValue.billing_address_1 = this.streetNumber + " " + this.formFieldsValue.billing_address_1)
        },
        fillForm: function() {
            for (var e in this.formFieldsValue)
                if ("billing_country" == e) this.selectRegion(e, this.formFieldsValue[e]);
                else {
                    if (null === document.getElementById(e)) continue;
                    document.getElementById(e).value = this.formFieldsValue[e]
                }
        },
        selectRegion: function(e, s) {
            if (null == document.getElementById(e)) return !1;
            for (var t = document.getElementById(e), n = 0; n < t.options.length; n++)
                if (t.options[n].text == s) {
                    t.selectedIndex = n;
                    break
                }
        },
        resetForm: function() {
            null !== document.getElementById("billing_address_2") && (document.getElementById("billing_address_2").value = "")
        },
        setCurrentCountry: function() {
            if (null === document.getElementById("billing_country")) e = "US";
            else var e = document.getElementById("billing_country").value;
            this.sugessions.setComponentRestrictions({
                country: e
            })
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...