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