2016-02-01 5 views
0

Я боролся с этим в течение последних трех часов. Я понятия не имею, что еще я могу попробовать. Я хочу, чтобы var undecidedType, undecidedFilter был установлен, когда нажата кнопка «id». Я понятия не имею, что я делаю неправильно. Может, кто-то может помочь.ТипError: undefined не является объектом (оценка 'type.toString')

Вот мой .js:

function getLocation() { 
Modernizr.geolocation ? navigator.geolocation.getCurrentPosition(currentLocation, handle_error, { 
    timeout: 1e4 
}) : ($wait.fadeOut(), $locationBar.fadeIn()) 
} 
function handle_error(e) { 
$locationBar.css("opacity", 1), showError("Location not found"), 0 == e.code, 1 == e.code, 2 == e.code, 3 == e.code 
} 
function currentLocation(e) { 
$wait.fadeIn(), $locationBar.fadeOut(); 
var o = e.coords.latitude, t = e.coords.longitude; 

var undecidedType, undecidedFilter; 

var b1 = document.getElementById('rest'), b2 = document.getElementById('bar'); 

b1.onclick = function() { 
    undecidedType = "restaurant"; 
    undecidedFilter = "restaurant"; 
}; 
b2.onclick = function() { 
    undecidedType = "bars"; 
    undecidedFilter = "pubs"; 
}; 
currentlatlng = new google.maps.LatLng(o, t), getPlaces(currentlatlng, undecidedType) 
} 
function getPlaces(e, type) { 
userLoc = e, homeMarker = new google.maps.Marker({ 
    map: map, 
    animation: google.maps.Animation.DROP, 
    position: e, 
    icon: homeIcon 
}); 
var o = { 
    location: e, 
    radius: 1e3, 
    rankby: "prominance", 
    keyword: type.toString() 
}; 
service.search(o, storeRequestBar) 
} 
function storeRequestBar(e, undecidedFilter) { 
barResultsStore = e; 
var o = { 
    location: currentlatlng, 
    radius: 1e3, 
    rankby: "prominance", 
    keyword: undecidedFilter.toString() 
}; 
service.search(o, storeRequestPub) 
} 
function storeRequestPub(e) { 
for (pubResultsStore = e, totalResults = barResultsStore.concat(pubResultsStore), resultsStore = removeDupes(totalResults, "id"), resultsStore = resultsStore.sort(function() { 
    return Math.random() - .5 
}), i = 0; i < resultsStore.length; i++); 
0 == resultsStore && showError("Cannot find anything in that location. Try somewhere else"), chooseBar(resultsStore) 
} 
function chooseBar(e) { 
barRef = { 
    reference: e[shitCounter].reference 
}, service.getDetails(barRef, showBar) 
} 
function showBar(e, o, hello) { 
if (o == google.maps.places.PlacesServiceStatus.OK) { 
    for (i in markersArray) 
     markersArray[i].setMap(null); 
    drinkMarker = new google.maps.Marker({ 
     map: map, 
     animation: google.maps.Animation.DROP, 
     position: e.geometry.location, 
     icon: drinkIcon 
    }), markersArray.push(drinkMarker), placeName = e.name, calcRoute(userLoc, e.geometry.location), directionsDisplay.setMap(null), directionsDisplay.suppressMarkers=!0, directionsDisplay.polylineOptions = { 
     strokeColor: "#ff8400", 
     strokeOpacity: .8, 
     strokeWeight: 5 
    }, directionsDisplay.setMap(map), placeSite = e.website ? e.website : e.url, placeAddress = e.formatted_address, $(".recommendation__destination").html("Why don't you go to <br/><a href='" + placeSite + "' target='_blank'>" + placeName + "</a>" + currentLocation.hello + ""), $(".map__address").html(placeAddress), $(".grid__row--links,.grid__row--actions,.fyyfs,.recommendation,.map__address,.recommendation__destination,.adsense").fadeIn(function() { 
     $wait.fadeOut() 
    }) 
} 
} 
function calcRoute(e, o) { 
var t = { 
    origin: e, 
    destination: o, 
    travelMode: google.maps.TravelMode.WALKING 
}; 
directionsService.route(t, function(e, o) { 
    o == google.maps.DirectionsStatus.OK && directionsDisplay.setDirections(e) 
}) 
} 
function codeAddress() { 
$wait.fadeIn(function() { 
    $locationBar.fadeOut(); 
    var e = document.getElementById("locationsearch").value; 
    geocoder.geocode({ 
     address: e 
    }, function(e, o) { 
     o == google.maps.GeocoderStatus.OK ? (currentlatlng = e[0].geometry.location, getPlaces(currentlatlng)) : showError("Location not found. Try again") 
    }) 
}) 
} 
function showError(e) { 
$wait.fadeOut(), $locationBar.fadeIn(), $(".locator__message").text(e).fadeIn() 
} 
function removeDupes(e, o) { 
var t = [], r = {}; 
for (var a in e) 
    r[e[a][o]] = e[a]; 
for (a in r) 
    t.push(r[a]); 
return t 
} 
var resultref, marker, markersArray = [], shitCounter = 0, iteration = 0, drinkIcon = "img/restaurant_map_pointer_small-2.png", homeIcon = "img/current_location_map_pointer_small-2.png", resultsStore, totalResults = [], pubResultsStore, barResultsStore, userLoc, currentlatlng, undecidedType, undecidedFilter; 
$wait = $(".loader"), $locationBar = $(".locator"), $mapCanvas =  $(".map__canvas"), $type = $(".type"); 
var lowSat = [{ 
featureType: "all", 
stylers: [{ 
    saturation: 1, 
    strokeColor: "red", 
    strokeOpacity: .8, 
    strokeWeight: 5 
} 
] 
} 
], myOptions = { 
zoom: 10, 
mapTypeId: google.maps.MapTypeId.ROADMAP, 
styles: lowSat, 
mapTypeControl: !1, 
panControl: !1, 
zoomControl: !0, 
mapTypeControl: !1, 
scaleControl: !1, 
streetViewControl: !1, 
overviewMapControl: !1 
}; 
map = new google.maps.Map(document.getElementById("googlemap"), myOptions), geocoder = new google.maps.Geocoder; 
var service = new google.maps.places.PlacesService(map); 
$(document).ready(function() { 
var e = window.location.href, o = e.split("?"); 
"undcd" == o[1] ? $locationBar.css("opacity", 1) : getLocation() 
}); 
var directionsDisplay = new google.maps.DirectionsRenderer({ 
suppressMarkers: !0 
}), directionsService = new google.maps.DirectionsService; 
$(".locator").on("submit", function(e) { 
codeAddress(), e.preventDefault() 
}), $(".actions__shit").click(function() { 
return shitCounter < resultsStore.length - 1 ? shitCounter++ : shitCounter = 0, chooseBar(resultsStore), !1 
}); 
var autoOptions = { 
types: ["geocode"] 
}, autoInput = document.getElementById("locationsearch"); 
autocomplete = new google.maps.places.Autocomplete(autoInput, autoOptions); 

Здесь вы HTML форма:

<form class="form" class="locator" action="#"> 
     <button id="rest" class="btn" type="submit" value="restaurant">two</button><br> 
     <button id="bar" class="btn" type="submit" value="bar">one</button><br> 
    </form> 

Здесь ошибка:

TypeError: undefined is not an object (evaluating 'type.toString') 
getPlacesapp-min.js:37 
currentLocationapp-min.js:24 

ответ

0

type не определен, когда вы первый вызов getPlaces , так как undecidedType определяется, когда пользователь нажимает кнопку c.

Изменить эту строку в getPaces:

keyword: type.toString() 

в

keyword: type ? type.toString() : "" 

Или установить значение по умолчанию для undecidedType

Чтобы исправить ваши клики слушателей, изменить это:

b1.onclick = function() { 
     undecidedType = "restaurant"; 
     undecidedFilter = "restaurant"; 
     currentlatlng = new google.maps.LatLng(o, t); 
     getPlaces(currentlatlng, undecidedType); 
}; 

b2.onclick = function() { 
    undecidedType = "bars"; 
    undecidedFilter = "pubs"; 
    currentlatlng = new google.maps.LatLng(o, t); 
    getPlaces(currentlatlng, undecidedType) 
}; 
+0

Th Анк ты! Но переменные все еще не устанавливаются, когда пользователь нажимает кнопку:/ –

+0

Итак, проблема в том, что переменные не установлены, было не очень понятно, вы все еще получаете ошибку? –

+0

Я больше не получаю ошибку, но когда я отправляю форму с помощью кнопки, она не устанавливает переменные. –

Смежные вопросы