jQuery Изключване на preventDefault()

Имам страница, на която има бутон за получаване на упътвания. 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>

person David Webb    schedule 18.02.2015    source източник
comment
Не съм сигурен, че разбирам всичко тук, но опитайте с href="javascript:void(0)" вместо href="#". По този начин не трябва да се налага да предотвратявате поведението по подразбиране на първо място.   -  person Frédéric Hamidi    schedule 18.02.2015


Отговори (1)


Само return false, когато искате да деактивирате събитието по подразбиране.

person Thibault Henry    schedule 18.02.2015