فهرست منبع

#4824 Add new block: location field doesn't work after tab switching

Alex Trofimov 2 سال پیش
والد
کامیت
50ba8a450f
3فایلهای تغییر یافته به همراه42 افزوده شده و 39 حذف شده
  1. 2 0
      inc/classes/BxDolLocationFieldNominatim.php
  2. 23 23
      template/location_field_plain.html
  3. 17 16
      template/location_field_plain_auto.html

+ 2 - 0
inc/classes/BxDolLocationFieldNominatim.php

@@ -84,6 +84,7 @@ class BxDolLocationFieldNominatim extends BxDolLocationField
                 $sLocationString = $aVars['lat'] . ', ' . $aVars['lng'];
                 $sLocationString = $aVars['lat'] . ', ' . $aVars['lng'];
             }
             }
 
 
+            $aVars['form_id'] = $oForm->id;
             $aVars['name'] = $aInput['name'];
             $aVars['name'] = $aInput['name'];
             $aVars['input'] = $oForm->genInputSwitcher($aInputField);
             $aVars['input'] = $oForm->genInputSwitcher($aInputField);
             $aVars['id_status'] = $oForm->getInputId($aInput) . '_status';
             $aVars['id_status'] = $oForm->getInputId($aInput) . '_status';
@@ -133,6 +134,7 @@ class BxDolLocationFieldNominatim extends BxDolLocationField
                 }
                 }
             }
             }
             $sRet = $oForm->getTemplate()->parseHtmlByName('location_field_plain.html', array(
             $sRet = $oForm->getTemplate()->parseHtmlByName('location_field_plain.html', array(
+                'form_id' => $oForm->id,
                 'name' => $aInput['name'],
                 'name' => $aInput['name'],
                 'minimized' => $bMinimized ? 'minimized' : '',
                 'minimized' => $bMinimized ? 'minimized' : '',
                 'nominatim_server' => $this->getNominatimServer(),
                 'nominatim_server' => $this->getNominatimServer(),

+ 23 - 23
template/location_field_plain.html

@@ -13,7 +13,7 @@
 <script>
 <script>
 (function () {
 (function () {
 
 
-    var eForm = $('.bx-form-input-location-__name__').parents('form:first');
+    var eForm = $('#__form_id__');
     eForm.on('submit', function (ev) {
     eForm.on('submit', function (ev) {
         if (typeof(glBxLocationDisableFormSubmit) !== 'undefined' && glBxLocationDisableFormSubmit)
         if (typeof(glBxLocationDisableFormSubmit) !== 'undefined' && glBxLocationDisableFormSubmit)
             ev.preventDefault();
             ev.preventDefault();
@@ -28,13 +28,13 @@
     }
     }
 
 
     var getLocationParams = function (sMode) {
     var getLocationParams = function (sMode) {
-        var sCountry = $('select[name="__name___country"] :selected').text();
-        var sCountryCode = $('select[name="__name___country"]').val();
-        var sZip = $('input[name="__name___zip"]').val();
-        var sState = $('input[name="__name___state"]').val();
-        var sCity = $('input[name="__name___city"]').val();
-        var sStreet = $('input[name="__name___street"]').val();
-        var sNum = $('input[name="__name___street_number"]').val();
+        var sCountry = eForm.find('select[name="__name___country"] :selected').text();
+        var sCountryCode = eForm.find('select[name="__name___country"]').val();
+        var sZip = eForm.find('input[name="__name___zip"]').val();
+        var sState = eForm.find('input[name="__name___state"]').val();
+        var sCity = eForm.find('input[name="__name___city"]').val();
+        var sStreet = eForm.find('input[name="__name___street"]').val();
+        var sNum = eForm.find('input[name="__name___street_number"]').val();
 
 
         if (!sCountryCode || !sCountryCode.length)
         if (!sCountryCode || !sCountryCode.length)
             return '';
             return '';
@@ -65,13 +65,13 @@
             glBxLocationFieldPlainGeocodingRequest = false;
             glBxLocationFieldPlainGeocodingRequest = false;
             if (('object' === typeof oResult) && oResult.length && ('undefined' !== typeof oResult[0].lat) && ('undefined' !== typeof oResult[0].lon)) {
             if (('object' === typeof oResult) && oResult.length && ('undefined' !== typeof oResult[0].lat) && ('undefined' !== typeof oResult[0].lon)) {
 
 
-                $('input[name="__name___lat"]').val(oResult[0].lat);
-                $('input[name="__name___lng"]').val(oResult[0].lon);
+                eForm.find('input[name="__name___lat"]').val(oResult[0].lat);
+                eForm.find('input[name="__name___lng"]').val(oResult[0].lon);
                 if ('undefined' !== typeof(oResult[0].address)) {
                 if ('undefined' !== typeof(oResult[0].address)) {
-                    if ('undefined' !== typeof(oResult[0].address.state) && 0 == $('input[name="__name___state"]').val().length)
-                        $('input[name="__name___state"]').val(oResult[0].address.state);
-                    else if (__normalize_names__ && $('input[name="__name___state"]').val() != oResult[0].address.state)
-                        $('input[name="__name___state"]').val(oResult[0].address.state);
+                    if ('undefined' !== typeof(oResult[0].address.state) && 0 == eForm.find('input[name="__name___state"]').val().length)
+                        eForm.find('input[name="__name___state"]').val(oResult[0].address.state);
+                    else if (__normalize_names__ && eForm.find('input[name="__name___state"]').val() != oResult[0].address.state)
+                        eForm.find('input[name="__name___state"]').val(oResult[0].address.state);
 
 
                     var sCity = '';
                     var sCity = '';
                     if ('undefined' !== typeof(oResult[0].address.city))
                     if ('undefined' !== typeof(oResult[0].address.city))
@@ -82,9 +82,9 @@
                         sCity = oResult[0].address.village;
                         sCity = oResult[0].address.village;
 
 
                     if (sCity && 0 == $('input[name="__name___city"]').val().length)
                     if (sCity && 0 == $('input[name="__name___city"]').val().length)
-                        $('input[name="__name___city"]').val(sCity);
-                    else if (__normalize_names__ && sCity && $('input[name="__name___city"]').val() != sCity)
-                        $('input[name="__name___city"]').val(sCity);
+                        eForm.find('input[name="__name___city"]').val(sCity);
+                    else if (__normalize_names__ && sCity && eForm.find('input[name="__name___city"]').val() != sCity)
+                        eForm.find('input[name="__name___city"]').val(sCity);
                 }
                 }
                 if ('undefined' !== typeof(oResult[0].licence))
                 if ('undefined' !== typeof(oResult[0].licence))
                     $('.bx-form-input-location-__name__ .bx-form-input-location-copyright').html(oResult[0].licence);
                     $('.bx-form-input-location-__name__ .bx-form-input-location-copyright').html(oResult[0].licence);
@@ -96,8 +96,8 @@
                     geocode(a, i);
                     geocode(a, i);
                 }
                 }
                 else {
                 else {
-                    $('input[name="__name___lat"]').val(0);
-                    $('input[name="__name___lng"]').val(0);
+                    eForm.find('input[name="__name___lat"]').val(0);
+                    eForm.find('input[name="__name___lng"]').val(0);
                     setLocationStatus('fail');
                     setLocationStatus('fail');
                 }
                 }
             }
             }
@@ -105,8 +105,8 @@
     }
     }
 
 
     var setLocationStatus = function (s) {
     var setLocationStatus = function (s) {
-        $('.bx-form-input-location-__name__ .bx-form-input-location-status').hide();
-        $('.bx-form-input-location-__name__ .bx-form-input-location-status.' + s).show();
+        eForm.find('.bx-form-input-location-__name__ .bx-form-input-location-status').hide();
+        eForm.find('.bx-form-input-location-__name__ .bx-form-input-location-status.' + s).show();
         if ('loading' !== s)
         if ('loading' !== s)
             disableFormSubmit(false);
             disableFormSubmit(false);
     }
     }
@@ -114,7 +114,7 @@
     setLocationStatus('undef');
     setLocationStatus('undef');
 
 
     $(document).ready(function () {
     $(document).ready(function () {
-        $('input[name^="__name__"],select[name^="__name__"]').on('change', function () {
+        eForm.find('input[name^="__name__"],select[name^="__name__"]').on('change', function () {
             if ('undefined' !== typeof(glBxLocationFieldPlainGeocodingRequest) && glBxLocationFieldPlainGeocodingRequest) { // cancel previous request
             if ('undefined' !== typeof(glBxLocationFieldPlainGeocodingRequest) && glBxLocationFieldPlainGeocodingRequest) { // cancel previous request
                 clearTimeout(glBxLocationFieldPlainGeocodingRequest);
                 clearTimeout(glBxLocationFieldPlainGeocodingRequest);
                 glBxLocationFieldPlainGeocodingRequest = null;
                 glBxLocationFieldPlainGeocodingRequest = null;
@@ -144,7 +144,7 @@
         });
         });
 
 
         if (getLocationParams()) {
         if (getLocationParams()) {
-            if (parseFloat($('input[name="__name___lat"]').val()) && parseFloat($('input[name="__name___lng"]').val()))
+            if (parseFloat(eForm.find('input[name="__name___lat"]').val()) && parseFloat(eForm.find('input[name="__name___lng"]').val()))
                 setLocationStatus('ok');
                 setLocationStatus('ok');
             else
             else
                 setLocationStatus('fail');
                 setLocationStatus('fail');

+ 17 - 16
template/location_field_plain_auto.html

@@ -17,12 +17,13 @@
 <input type="hidden" name="__name___street_number" value="__street_number__" />
 <input type="hidden" name="__name___street_number" value="__street_number__" />
 
 
 <script>
 <script>
-    $('input[name=__name__][type=checkbox]').on('change', function () {
+    var eForm = $('#__form_id__');
+    eForm.find('input[name=__name__][type=checkbox]').on('change', function () {
         var _self = this;
         var _self = this;
         var callbackOnLocationReset = function (error) {
         var callbackOnLocationReset = function (error) {
-            $('[name="__name___lat"]').val('');
-            $('[name="__name___lng"]').val('');
-            $('#__id_status__ span').html("<bx_text_js:_sys_location_field_label />");
+            eForm.find('[name="__name___lat"]').val('');
+            eForm.find('[name="__name___lng"]').val('');
+            eForm.find('#__id_status__ span').html("<bx_text_js:_sys_location_field_label />");
             $(_self).prop("checked", false);
             $(_self).prop("checked", false);
             $(_self).parents('.bx-switcher-cont').removeClass('on').addClass('off');
             $(_self).parents('.bx-switcher-cont').removeClass('on').addClass('off');
         }
         }
@@ -42,17 +43,17 @@
                     glBxLocationFieldPlainAutoGeocodingRequest = false;
                     glBxLocationFieldPlainAutoGeocodingRequest = false;
 
 
                     if (('object' === typeof oResult) && ('undefined' !== typeof oResult.display_name) && ('undefined' !== typeof oResult.address) && ('undefined' !== typeof oResult.address.country_code)) {
                     if (('object' === typeof oResult) && ('undefined' !== typeof oResult.display_name) && ('undefined' !== typeof oResult.address) && ('undefined' !== typeof oResult.address.country_code)) {
-                        $('[name="__name___lat"]').val(position.coords.latitude);
-                        $('[name="__name___lng"]').val(position.coords.longitude);
+                        eForm.find('[name="__name___lat"]').val(position.coords.latitude);
+                        eForm.find('[name="__name___lng"]').val(position.coords.longitude);
 
 
-                        $('[name="__name___country"]').val(oResult.address.country_code.toUpperCase());
+                        eForm.find('[name="__name___country"]').val(oResult.address.country_code.toUpperCase());
 
 
                         if ('undefined' !== typeof oResult.address.suburb)
                         if ('undefined' !== typeof oResult.address.suburb)
-                            $('[name="__name___city"]').val(oResult.address.suburb);
+                            eForm.find('[name="__name___city"]').val(oResult.address.suburb);
                         else if ('undefined' !== typeof oResult.address.town)
                         else if ('undefined' !== typeof oResult.address.town)
-                            $('[name="__name___city"]').val(oResult.address.town);
+                            eForm.find('[name="__name___city"]').val(oResult.address.town);
                         else if ('undefined' !== typeof oResult.address.city)
                         else if ('undefined' !== typeof oResult.address.city)
-                            $('[name="__name___city"]').val(oResult.address.city);
+                            eForm.find('[name="__name___city"]').val(oResult.address.city);
 
 
                         var oMap = {
                         var oMap = {
                             'postcode': '__name___zip',
                             'postcode': '__name___zip',
@@ -62,16 +63,16 @@
                         }
                         }
                         $.each(oMap, function (i) {
                         $.each(oMap, function (i) {
                             if ('undefined' !== typeof oResult.address[i])
                             if ('undefined' !== typeof oResult.address[i])
-                                $('[name="' + this + '"]').val(oResult.address[i]);
+                                eForm.find('[name="' + this + '"]').val(oResult.address[i]);
                         });
                         });
 
 
-                        $('#__id_status__ span').html(oResult.display_name);
+                        eForm.find('#__id_status__ span').html(oResult.display_name);
                         if  ('undefined' !== typeof oResult.licence)
                         if  ('undefined' !== typeof oResult.licence)
-                            $('#__id_status__copyright').html(oResult.licence);
+                            eForm.find('#__id_status__copyright').html(oResult.licence);
 
 
                     } 
                     } 
                     else {
                     else {
-                        $('#__id_status__ span').html(position.coords.latitude + ', ' + position.coords.longitude);
+                        eForm.find('#__id_status__ span').html(position.coords.latitude + ', ' + position.coords.longitude);
                     }
                     }
                 });
                 });
             }, iTimeout);
             }, iTimeout);
@@ -80,11 +81,11 @@
         }
         }
 
 
         if ($(this).is(':checked')) {
         if ($(this).is(':checked')) {
-            $('#__id_status__ span').html('<bx_text_js:_sys_location_determining />');
+            eForm.find('#__id_status__ span').html('<bx_text_js:_sys_location_determining />');
             if (navigator.geolocation)
             if (navigator.geolocation)
                 navigator.geolocation.getCurrentPosition(callbackOnLocationSucess, callbackOnLocationReset);
                 navigator.geolocation.getCurrentPosition(callbackOnLocationSucess, callbackOnLocationReset);
             else
             else
-                $('#__id_status__ span').html('<bx_text_js:_sys_location_geolocation_not_supported_by_browser />');
+                eForm.find('#__id_status__ span').html('<bx_text_js:_sys_location_geolocation_not_supported_by_browser />');
         }
         }
         else {
         else {
             callbackOnLocationReset();
             callbackOnLocationReset();