2015-02-18 6 views
0

У меня есть страница, где у меня есть кнопка «получить направление». 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> 
+0

Не уверен, что я все понимаю здесь, но попробуйте с помощью 'href =" javascript: void (0) "' вместо 'href =" # "'. Таким образом, вам не следует в первую очередь предотвращать поведение по умолчанию. –

ответ

-1

Только return false, когда вы хотите отключить событие по умолчанию.