У меня есть страница, где у меня есть кнопка «получить направление». Href тега #, так что он сам связан. Когда пользователь нажимает эту кнопку, у меня есть сценарий, который предотвращает поведение по умолчанию, если ссылка по-прежнему установлена на '#'. Затем он использует некоторую информацию из URL-адреса, чтобы собрать запрос ajax в мою базу данных, чтобы получить адрес компании, чью страницу вы просматриваете. Затем он использует геолокацию, чтобы захватить позицию пользователя, а затем использует это для замены атрибута href кнопки.jQuery Отключение preventDefault()
У меня было это полностью, когда функция выполнялась на document.ready, но браузер запрашивал разрешение на получение местоположения до нажатия кнопки, что было нежелательно, поэтому я привязал его к событию click.
Я вызываю триггер (щелчок) в конце всего, но он по-прежнему предотвращает по умолчанию. Когда я нажимаю кнопку во второй раз, он делает то, что должен, но мой триггер не работает. Мой вопрос: есть ли способ сделать это так, как только функция будет запущена, триггер (щелчок) действительно работает так, как будто он был нажат второй раз. Мой код ниже.
<div class="row">
<div class="medium-11 medium-centered columns text-center">
<hr />
<a href="#" target="_blank" class="get-directions button" style="border-radius: 10px; font-family: oswald, sans-serif; FONT-SIZE: 14PT;">VIEW MAP & GET DIRECTIONS</a>
</div>
</div>
<script>
$('.get-directions').click(function(event) {
console.log($(this).attr("href"));
var linkHREF = $(this).attr("href");
console.log(linkHREF);
if (linkHREF == "#")
{
console.log("PREVENTED");
event.preventDefault();
var clientPID = window.location.href;
clientPID = clientPID.match(/\/webapp\/p\/[0-9]+/);
clientPID = clientPID[0].replace("/webapp/p/", "");
postData = {"pageID": clientPID};
var startingLocation;
var destination;
$.ajax({
dataType: "json",
data: postData,
type: "POST",
url: "/dealerLocator/getDirectionsButton.php",
success: compileAddress
});
}//END IF PREVENT
function compileAddress(jsonData)
{
destination = jsonData;
destination = destination.replace("#", "");
// check if browser supports geolocation
if (navigator.geolocation) {
if (navigator.geolocation.getCurrentPosition){
// get user's current position
navigator.geolocation.getCurrentPosition(function (position) {
// get latitude and longitude
var latitude = position.coords.latitude;
var longitude = position.coords.longitude;
startingLocation = latitude + "," + longitude;
// send starting location and destination to goToGoogleMaps function
goToGoogleMaps(startingLocation, destination);
});
}
}
}
// go to Google Maps function - takes a starting location and destination and sends the query to Google Maps
function goToGoogleMaps(startingLocation, destination) {
$getDirectionsLink = "https://maps.google.com/maps?saddr=" + startingLocation + "&daddr=" + destination;
$(".get-directions").attr("href", $getDirectionsLink);
console.log($(".get-directions").attr("href"));
$(".get-directions").trigger("click");
}
});
</script>
Не уверен, что я все понимаю здесь, но попробуйте с помощью 'href =" javascript: void (0) "' вместо 'href =" # "'. Таким образом, вам не следует в первую очередь предотвращать поведение по умолчанию. –