2017-02-14 50 views
0

我有一個按鈕來過濾搜索結果到最近的位置。按鈕與其他參數(NOT AJAX)

我的HTML按鈕

<a href="trending" onclick="addUrl(this); alert(this);" class="btn btn-warning" id="location">Nearest Location</a> 

我的jQuery

function addUrl(element){ 
    if(navigator.geolocation){ 
     navigator.geolocation.getCurrentPosition(function(position){ 
      var lat = position.coords.latitude; 
      var lng = position.coords.longitude; 
      console.log(lat); 
      console.log(lng); 

      $(element).attr('href',function(){ 
       return element.href + '?lat=' + lat + '&lng=' + lng; 
      }); 


     }); 
    } 

    else 
     alert("navigator.geolocation is not available"); 
} 

當我按一下按鈕,它似乎導航到URL不帶參數。不知道這裏有什麼問題。

回答

1

的問題是,geolocation.getCurrentPosition功能是異步所以實際上你的代碼更改href屬性後重定向進行操作。您可以禁用默認的鏈接點擊操作(使用e.preventDefault()return false單擊事件處理程序中)和內部geolocation.getCurrentPosition回調使用window.location.href = YOUR_URL_WITH_PARAMS這將導致重定向。

document.getElementById('location').addEventListener("click", function(e){ 
    e.preventDefault(); 
    var href = e.target.href; 
    addUrl(href); 
}); 

function addUrl(href){ 
    if(navigator.geolocation){ 
     navigator.geolocation.getCurrentPosition(function(position){ 
      var lat = position.coords.latitude; 
      var lng = position.coords.longitude; 
      console.log(lat); 
      console.log(lng); 
      window.location.href = href + '?lat=' + lat + '&lng=' + lng; 


     }); 
    } 

    else 
     alert("navigator.geolocation is not available"); 

} 
+0

如果使用的preventDefault()我怎麼瀏覽網頁與新添加的參數? –

+0

正如我提到的使用'window.location.href = YOUR_URL_WITH_PARAMS' - 設置這使得重定向。你可以在這裏閱讀更多:https://developer.mozilla.org/en-US/docs/Web/API/Window/location –

+0

是我不好,是的,它的工作原理的preventDefault感謝後 –

0

而不是HTML文檔中您的「onClick」事件,可以使用事件偵聽器,並調用了preventDefault()函數停止本地事件。 樣品:

document.getElementById('location').addEventListener("click", function(e){ 
    e.preventDefault(); 
    addUrl(this); 
}); 

addUrl功能:

function addUrl(element){ 
    if(navigator.geolocation){ 
     navigator.geolocation.getCurrentPosition(function(position){ 
      var lat = position.coords.latitude; 
      var lng = position.coords.longitude; 
      console.log(lat); 
      console.log(lng); 

      window.location.href = $(element).attr("href") + '?lat=' + lat + '&lng=' + lng; 
     }); 
    } 

    else 
     alert("navigator.geolocation is not available"); 
} 
+0

如果使用preventDefault(),我如何導航到新添加參數的頁面? –

+0

你想先執行你的功能,然後導航到'趨勢'。我對嗎? –

+0

我編輯了我的解決方案。基本上,你可以設置window.location.href屬性,就是這樣。 –