Имам страница, на която има бутон за получаване на упътвания. Href на етикета е #, така че да е свързан сам. Когато потребителят щракне върху този бутон, имам скрипт, който предотвратява поведението по подразбиране, ако връзката все още е настроена на „#“. След това използва малко информация от URL адреса, за да състави ajax заявка към моята база данни, за да получи адреса на компанията, чиято страница разглеждате. След това използва геолокация, за да вземе позицията на потребителя и след това използва това, за да замени атрибута href на бутона.
Накарах го да работи напълно, когато функцията се изпълняваше на document.ready, но браузърът искаше разрешение да получи местоположението, преди да се щракне върху бутона, което беше нежелателно, така че го обвързах със събитието за щракване.
Извиквам тригер (щракване) в края на всичко, но той все още предотвратява по подразбиране. Когато щракна върху бутон за втори път, той прави това, което трябва, но моят тригер не работи. Въпросът ми е: има ли начин да го направя така, че след като функцията се изпълни, тригерът (щракването) действително работи, сякаш е щракнат втори път. Моят код е по-долу:
<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="#"
. По този начин не трябва да се налага да предотвратявате поведението по подразбиране на първо място. - person Frédéric Hamidi   schedule 18.02.2015