2011-05-27 187 views
0

我正在嘗試構建一個簡單的jquery插件,用於查詢地理位置系統並返回有關用戶IP所基於的位置的數據,並在HTML表單中預先選擇它。基於JSON數據選擇下拉值

我有一個HTML選擇與所有國家代碼as值。我需要選擇返回的數據中引用的那個。這是我迄今爲止...

(function($){ 

    $.fn.geoselect = function() { 

     $.getJSON('http://www.geoplugin.net/json.gp?jsoncallback=?', function(data) { 
      this.attr("selected", "selected"); 
     }); 

    }; 

})(jQuery); 

顯然目前爲「本」與選擇作爲一個整體,其選項沒有一個這不會工作。例如,如果返回的數據是'GB',則需要選擇值爲'GB'的選項。

+0

您可以發佈您的JSON對象的示例,找出結構? – reporter 2011-05-27 15:18:56

+0

這個URL實際上是一個實時服務,所以你應該看到一個真實的例子。在這些數據中,它的「geoplugin_countryCode」值,例如:「GB」 – Plasticated 2011-05-27 15:20:04

+0

http://www.geoplugin.net/json.gp?jsoncallback=? – AlexC 2011-05-27 15:21:28

回答

0

你在裏面$ .getJSON,所以this不會參考您的選擇。而是將其保存到父範圍中的變量,然後在回調中訪問它。然後,您可以使用.find()方法獲取特定<option>標記。

我還要假設你從API取回的數據是data['geoplugin_city']

$.fn.geoselect = function() { 
    var dropdown = this; 

    $.getJSON('http://www.geoplugin.net/json.gp?jsoncallback=?', function(data) { 
     $(dropdown).find('option[value="' + data['geoplugin_city'] + '"]').attr("selected", "selected"); 
    }); 
}; 
+0

斑點!不錯的傑米:) – Plasticated 2011-05-27 15:43:53

1

代替this.attr("selected", "selected");做到這一點:

var selectedData = 'GB' // assuming you extracted it from JSON data already 

$("option[value='" + selectedData + "']", $(this)).attr("selected", "selected"); // Assuming that "this" is a reference to your picklist. 
+0

嗯,沒有錯誤,但它似乎並沒有工作......我在jsfiddle上設置了一個例子。 http://jsfiddle.net/sru59/ – Plasticated 2011-05-27 15:37:51

+0

@Plasticated。我檢查了你的jsfiddle。它未被選中的原因是因爲select中每個選項元素的value屬性都是小寫。這樣做:$(「option [value ='」+ data.geoplugin_countryCode.toLowerCase()+「']」,$(this))。attr(「selected」,「selected」); – nickytonline 2011-05-29 01:48:07