2011-07-14 117 views
2

我正在開發iphone手機應用程序,我正在使用jQuery手機。我想在頁面上實現一個簡單的功能,例如在我的html頁面上按下按鈕時,檢查我是否有互聯網連接。如果我這樣做,那麼繼續下一頁,顯示錯誤頁面。JavaScript與jQuery手機和phonegap不按預期方式工作

我包括庫:

<link rel="stylesheet" type="text/css" href="lib/jquery.mobile-1.0b1.min.css" /> 
    <script type="text/javascript" src="lib/jquery-1.6.1.js"></script> 
    <script type="text/javascript" charset="utf-8" src="phonegap.0.9.5.1.min.js"></script> 
    <script type="text/javascript" src="functionality.js"></script> 
    <script type="text/javascript" src="lib/jquery.mobile-1.0b1.min.js"></script> 

page1.html我的HTML代碼:

<a href = "#map_page" id='map_button' data-role="button" onclick = "connection();">Go!</a> 

現在functionality.js文件包含根據書面的連接()函數PhoneGap的的文檔:

function connection(){ 
alert('checking...'); 
// check if there is internet connection 
navigator.network.isReachable("google.com", isNetworkAvailable, {}); 

}

function isNetworkAvailable(status) { 
    var networkState = status.code; 
    alert('Connection Type ' + networkState + ' - ' + status.message); } 

的問題是,我從來沒有得到的連接()函數,即使是在我使用下面的腳本在我的html頁面:

$(「#map_button」)點擊(。函數(event){ checkConnection()});

我一直在這段代碼上工作了幾天而沒有能夠使它工作。我會很感激你的幫助......

+0

是在閉包中定義的「連接」還是被添加到全局對象? –

回答

0

我也遇到了麻煩檢查的連接,但發現使用VAR做的networkState = navigator.network.connection.type的替代方法;我已經實現了將交換功能綁定到所有鏈接的完全不同。因爲它可能對deviceReady方法感興趣,所以我綁定所有鏈接來調用一個函數,以決定是否需要連接檢查或該鏈接需要連接檢查。跳到第二個連接功能的功能!

function onDeviceReady() 
{ 

    //Bind all links and intercept them before they go anywhere //I'm jquery dependant 
    $('a').bind('click', function(event) { 
     switch($(this).attr('id'))//using the id value of the link we help us decide what kidn of action we are doing 
     { 
      case "data-loader-page": 
       return event; 
      break; 

      case "load-version-data": //I'm about to pull JSON data from a server 

       if(!checkConnection()){return false}; //check for connection and exit if it fails. 

       doJSON(); //at this point we have a connection so go get remote data. 
       return false; 
      break; 

      //for un-handled links we will assume that you just want to hash bang 
      default: return event; 
     } 
    }); 
} 

此功能只是對我很好,你可以在線調用它在你的onclick事件,如果你想。它也不依賴於jquery。

function checkConnection() { 
    var networkState = navigator.network.connection.type; 

    var states = {}; 
    states[Connection.UNKNOWN] = 'Unknown connection'; 
    states[Connection.ETHERNET] = 'Ethernet connection'; 
    states[Connection.WIFI]  = 'WiFi connection'; 
    states[Connection.CELL_2G] = 'Cell 2G connection'; 
    states[Connection.CELL_3G] = 'Cell 3G connection'; 
    states[Connection.CELL_4G] = 'Cell 4G connection'; 
    states[Connection.NONE]  = 'No network connection'; 

    if(states[networkState]==states[Connection.NONE] || states[networkState]==states[Connection.UNKNOWN]){ 
     alert('A network connection is required to access this page.'); 
     return false; 
    } else { 
     return true;  
    } 
} 

我的jQuery/jQuery Mobile的依賴

​​

不是最優雅的例子,我知道,但我希望這會有所幫助;

+0

我得到navigator.network.isReachable()和navigator.network.connection解析爲未定義。有什麼特別的東西需要你去訪問這些變量嗎?我有gps的東西工作,所以我有機會獲得一些phonegap API的東西。有什麼想法嗎? – Landon

+0

@Landon我不記得有什麼特別的設置。這對我在一個包含phoneGap 1.0.0 js的帶有phoneGap的xcode項目設置中工作得很好。唯一的'特殊'事情是在device/phonegap和所有服裝準備好之後調用它。 – Wade

-1

您是否嘗試過改變你的HTML:

<a href="#map_page" id='map_button' data-role="button" onclick="connection">Go!</a> 

沒有()?通常如果添加()它將執行該函數並將其替換爲該函數的返回值。儘管如此,我並不是100%肯定地發生在HTML onclick屬性上。值得一試。

你的第二次嘗試看起來像錯誤的函數名,checkConnection() VS connection()

+0

這不是它的工作原理。 –

+0

我假設你指的是我的第一個建議。我不是很有信心。第二個應該工作。 –

+0

@Nathan Loyer:你建議刪除()不起作用。你有沒有其他建議?關於函數的名稱,在我的代碼中是正確的,因爲我有不同的名稱。 – tasanoui