Путаница с массивами поля в коде js

304
08 ноября 2017, 04:03

Помогите пожалуйста разобраться с кодом. У меня есть 2 гугл карты, в каждой карте карте есть input с классом .search, куда я передаю районы. В input первой карты значение передается и сохраняется, но в случае со вторым полем - путаница. В консоль пишет Uncaught TypeError: Cannot read property 'placeholder' of undefined Заметил, что когда выполняется код первой карты, то в консоли видно что элементов .search 3, но когда инициализирую уже вторую карту, их уже 4. Вызов 1 карты

function initMapfirst() {
    google.maps.event.addDomListener(window, 'load', initMapfirst);
    map = new google.maps.Map(document.getElementById("map"), mapOptions);
    var marker = new google.maps.Marker({
        position: centerLatLng,
        map: map
    });
    map.mapTypes.set('map_style', styledMap);
    map.setMapTypeId('map_style');
    google.maps.event.addListener(map, "click", function (e) {
        infoBubble.close();
        marker.setMap(null);
        for (var i = 0; i < all_shops.length; i++) {
            var latLng = new google.maps.LatLng(all_shops[i].lat, all_shops[i].lng);
            var name = all_shops[i].name;
            var tel = all_shops[i].tel;
            var social = all_shops[i].social;
            var email = all_shops[i].email;
            var time = all_shops[i].time;
            addMarker(latLng, name, tel, social, email, time);
        }
        marker = new google.maps.Marker({
            position: e.latLng,
            map: map
        });
        all_markers.push(marker);
        placeMarker(e.latLng, map, marker);
    });
    for (var i = 0; i < all_shops.length; i++) {
        var latLng = new google.maps.LatLng(all_shops[i].lat, all_shops[i].lng);
        var name = all_shops[i].name;
        var tel = all_shops[i].tel;
        var social = all_shops[i].social;
        var email = all_shops[i].email;
        var time = all_shops[i].time;
        addMarker(latLng, name, tel, social, email, time);
    }
    function addMarker(latLng, name, tel, social, email, time) {
        var marker = new google.maps.Marker({
            position: latLng,
            map: map,
            title: name,
            content: tel + social + email + time
        });
        all_markers.push(marker);
        google.maps.event.addListener(marker, "click", function () {
            infoBubble.open(map, marker);
        });
    }
    var input = document.getElementById("str");
    input.classList.remove('hidden');
    var autocomplete = new google.maps.places.Autocomplete(input);
    autocomplete.bindTo('bounds', map);
    map.controls[google.maps.ControlPosition.TOP_LEFT].push(input);
    autocomplete.addListener('place_changed', function () {
        infoBubble.close();
        var place = autocomplete.getPlace();
        if (!place.geometry) {
            return;
        }
        if (place.geometry.viewport) {
            map.fitBounds(place.geometry.viewport);
        } else {
            map.setCenter(place.geometry.location);
            map.setZoom(17);
        }
        // Set the position of the marker using the place ID and location.
        marker.setPlace({
            placeId: place.place_id,
            location: place.geometry.location
        });
        marker.setPosition(place.geometry.location);
        $('#pic_lat').val(place.geometry.location.lat().toFixed(7));
        $('#pic_lng').val(place.geometry.location.lng().toFixed(7));
        $('.google-search')[0].value = input.value;
        infoBubble.open(map, marker);
    });
}

Вызов 2 карты:

    function initMapsecond() {
    google.maps.event.addDomListener(window, 'load', initMapSameDay);
    map = new google.maps.Map(document.getElementById("map_two"), mapOptions);
    var marker = new google.maps.Marker({
        position: centerLatLng,
        map: map
    });
    map.mapTypes.set('map_style', styledMap);
    map.setMapTypeId('map_style');

    google.maps.event.addListener(map, "click", function (e) {
        infoBubble.close();
        marker.setMap(null);
        for (var i = 0; i < all_shops.length; i++) {
            var latLng = new google.maps.LatLng(all_shops[i].lat, all_shops[i].lng);
            var name = all_shops[i].name;
            var tel = all_shops[i].tel;
            var social = all_shops[i].social;
            var email = all_shops[i].email;
            var time = all_shops[i].time;
            addMarker(latLng, name, tel, social, email, time);
        }
        marker = new google.maps.Marker({
            position: e.latLng,
            map: map
        });
        all_markers.push(marker);
        placeMarker(e.latLng, map, marker);
    });
    for (var i = 0; i < all_shops.length; i++) {
        var latLng = new google.maps.LatLng(all_shops[i].lat, all_shops[i].lng);
        var name = all_shops[i].name;
        var tel = all_shops[i].tel;
        var social = all_shops[i].social;
        var email = all_shops[i].email;
        var time = all_shops[i].time;
        addMarker(latLng, name, tel, social, email, time);
    }
    function addMarker(latLng, name, tel, social, email, time) {
        var marker = new google.maps.Marker({
            position: latLng,
            map: map,
            title: name,
            content: tel + social + email + time
        });
        all_markers.push(marker);
        google.maps.event.addListener(marker, "click", function () {
            infoBubble.open(map, marker);
        });
    }
    var input = document.getElementById("str-2");
    input.classList.remove('hidden');
    var autocomplete = new google.maps.places.Autocomplete(input);
    autocomplete.bindTo('bounds', map);
    map.controls[google.maps.ControlPosition.TOP_LEFT].push(input);
    autocomplete.addListener('place_changed', function () {
        infoBubble.close();
        var place = autocomplete.getPlace();
        if (!place.geometry) {
            return;
        }
        if (place.geometry.viewport) {
            map.fitBounds(place.geometry.viewport);
        } else {
            map.setCenter(place.geometry.location);
            map.setZoom(17);
        }
        // Set the position of the marker using the place ID and location.
        marker.setPlace({
            placeId: place.place_id,
            location: place.geometry.location
        });
        marker.setPosition(place.geometry.location);
        $('#pic_lat').val(place.geometry.location.lat().toFixed(7));
        $('#pic_lng').val(place.geometry.location.lng().toFixed(7));
        $('.google-search')[2].value = input.value;
        infoBubble.open(map, marker);
    });
}

Код, где я передаю значение/районы:

    $('#districts, #cities').change(function () {
    console.log($('.search'));
    setTimeout(function () {
        $('.google-search')[1].value = $('#districts').find(':selected').data('distr');
        $('.google-search')[1].focus();
    }, 300);
});
$('#districts-same-day, #cities-same-day').change(function () {
    console.log($('.search'));
    setTimeout(function () {
        if ($('.google-search')[3].placeholder.length > 0) {
            $('.google-search')[3].value = $('#districts-same-day').find(':selected').data('distr');
            $('.google-search')[3].focus();
        }
        else {
            $('.google-search')[2].value = $('#districts-same-day').find(':selected').data('distr');
            $('.google-search')[2].focus();
        }
    }, 300);
});

READ ALSO
Делаю сервис со своей логикой но возникают ошибки

Делаю сервис со своей логикой но возникают ошибки

Делаю сервис со своей логикой но возникают ошибки:

194
Webpack. Не подключаются библиотеки

Webpack. Не подключаются библиотеки

Подключаю библиотеки через один файл посредством того что копирую минифицированый код поочередно в один файл а потом подключаю уже только...

177
Ошибка в AngularJS. В чем проблема?

Ошибка в AngularJS. В чем проблема?

Подскажите, где я ошибся в данном коде? Почему ng-controller отказывается работать? Спасибо заранее

175
как задать значение свойству через js в asp.net mvc

как задать значение свойству через js в asp.net mvc

Допустим в представление есть 2 числовых поляВ первое мы вводим значение свойству в модели, а второе поле js сам изменяет по какой-то формуле...

187