2011-05-27 190 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