2012-04-20 71 views
1

我有一個奇怪的問題。PHP'跳動'javascript函數調用?

我正在創建一個基於位置的web應用程序,該應用程序使用javascript函數來獲取用戶的GPS座標。我有一個帶有提交按鈕的表單,當點擊提交按鈕時,函數被調用(onclick ='getCoords()「)。然後,javascript將兩個隱藏字段(緯度和經度)的值設置爲GPS座標

我的問題是這樣的:PHP是在'跳動'的JavaScript的意義上,字段值沒有及時設置,以便每個值變成0.我做了一堆測試,並且這肯定是問題,如果我這樣做設置一個單獨的按鈕來運行的JavaScript功能,運行形式,一切工作正常

如何解決這個問題的任何想法

要旨:?

https://gist.github.com/2425419

https://gist.github.com/2425394

https://gist.github.com/2425391

+4

如果JavaScript觸發表單提交,我不明白這是可能的。你可以發佈一些代碼嗎? – F21 2012-04-20 02:22:58

+14

不要問關於代碼的問題,然後不要顯示代碼。 – 2012-04-20 02:24:30

+1

讓我們看看代碼。我的猜測是'getCoords'中的某些內容是異步的。 – ceejayoz 2012-04-20 02:24:49

回答

2

沿着什麼Volkner表示,線,塊提交使用提交處理程序(叫preventDefault),然後提交在itsWorking結束。您可以撥打.submit()進行提交,也可以使用AJAX。

+0

完美工作,謝謝 – user182078 2012-04-20 02:57:24

1

我認爲問題的癥結在於<input type="image">將提交表格,就像<input type="submit">一樣確定。

但是,要解決此問題,請將event作爲參數添加到getUserLocation(event)的調用和聲明中。

然後如下編輯你的JavaScript:

function getUserLocation(event) { 
    event.preventDefault(); // prevents form from submitting 
    if (navigator.geolocation) { 
     navigator.geolocation.getCurrentPosition(itsWorking, notWorking); 
    } 
    else { 
     alert("Dang! Your browser doesn't support finding your location, use the zipcode method below."); 
    } 
}; 

function itsWorking(position) { 
    var lat = position.coords.latitude; 
    var longi = position.coords.longitude; 
    var finalLat = Math.round(lat*1000000)/1000000 
    var finalLong = Math.round(longi*1000000)/1000000 
    $("#longi").val(finalLong); 
    $("#lati").val(finalLat); 

    document.getElementById('findoneform').submit(); // submits form since we were successful 
}; 

但是正如我最初所說的那樣,似乎如果你使用的img標籤,而不是<input type="image">,將阻止形式在首位發送(也許你是故意這樣做的,因爲你想用兩種方法提交表單?)。

發生這個問題的原因是頁面在geolocator完成它的事情之前卸載(提交表單),但這樣,我們停止提交表單,並且僅在geolocator完成它的事情後才調用itsWorking(),所以我們當我們完成了我們想做的一切工作時,請不要在itsWorking()結束時提交表格。