2013-01-14 158 views
3

我需要在同一个下拉列表中创建与该地区(亚洲,东南亚,北美等..)和国家一起的下拉列表。 选择选项后,我将根据选择的国家/地区填充城市。下拉列表中的国家/地区和城市列表

它看起来像这样,但在一个下拉列表中,而不是将其展开。 以我国的新加坡,澳大利亚,柬埔寨等地区为例,以及所示的城市为国家。 enter image description here

或者更具体地说,像下面,台湾,中国大陆的地区,而城市作为国家对我的情况:

enter image description here

我所有的数据都从我的数据库中抽取的,我RegionTable看起来像这样

enter image description here

和我CountryTable这样的:

enter image description here

我已经得到了代码基础上选定的国家填充城市工作正常,现在的问题是,我不知道如何把区域与国家相同的下拉菜单。唯一的问题是我如何在区域中添加并使其无法选择,因为用户应该选择国家而不是区域。使用下面的代码

林让我CountryDropDownList

function loadPackage_CountryList() { 
$('#Package_Country option').each(function (i, option) { $(option).remove(); }); 
$('#Package_Country').attr('disabled', true); 
$("#Package_Country").append("<option value=''>Downloading...</option>"); 
$.ajax({ 
    type: "POST", url: PackageWSURL + "/GetPackageCountryList", data: "", 
    contentType: "application/json; charset=utf-8", dataType: "json", 
    success: function (response) { 
     var countries = response.d; 
     $('#Package_Country option').each(function (i, option) { $(option).remove(); }); 
     $('#Package_Country').attr('disabled', false); 
     for (var i = 0; i < countries.length; i++) { 
      $("#Package_Country").append("<option value='" + countries[i].Value + "'>" + countries[i].Display + "</option>"); 
     } 
    } 
}); 

}

任何人都可以帮我如何地区加入到下拉列表? 在此先感谢。

--------------编辑----------------------

这是我的WebMethod从我的数据库中获取数据。

[WebMethod] 
public List<jsonItem> GetPackageCountryList() 
{ 
    List<jsonItem> RecordList = new List<jsonItem>(); 

    jsonItem jItemA = new jsonItem(); 
    jItemA.Display = "All Countries"; 
    jItemA.Value = "ALL"; 
    jItemA.Group = "---"; 
    RecordList.Add(jItemA); 

    String ConnStr = WebConfigurationManager.ConnectionStrings["TOUR_DB_ConStr"].ConnectionString; 
    SqlConnection connection = new SqlConnection(ConnStr); 
    connection.Open(); 

    try 
    { 
     String SQL = "SELECT [CountryList].[CountryCode], [CountryList].[CountryName], [CountryList].[Regioncode] "; 
     SQL += "FROM [CountryTable] "; 
     SQL += "WHERE [CountryTable].[Activation] = 1 "; 
     SQL += "ORDER BY [CountryTable].[Regioncode], [CountryTable].[CountryName]"; 
     SqlCommand command = new SqlCommand(SQL, connection); 
     SqlDataReader dataReader = command.ExecuteReader(); 
     while (dataReader.Read()) 
     { 
      jsonItem RecordItem = new jsonItem(); 

      RecordItem.Display = dataReader["CountryName"].ToString() + " - " + dataReader["CountryCode"].ToString(); 
      RecordItem.Value = dataReader["CountryCode"].ToString(); 
      RecordItem.Group = getRegionName(dataReader["RegionCode"].ToString()); 
      RecordList.Add(RecordItem); 
     } 
     dataReader.Close(); 
    } 
    catch { } 
    finally 
    { 
     connection.Close(); 
    } 

    return RecordList; 
} 

我已经成功地从下面的功能OPTGROUP增加,但现在的问题是,我认为它会自动在<optgroup>在该行的末尾,即使我在已经添加添加ifelse功能。

function loadPackage_CountryList() { 
$('#Package_Country option').each(function (i, option) { $(option).remove(); }); 
$('#Package_Country').attr('disabled', true); 
$("#Package_Country").append("<option value=''>Downloading...</option>"); 
$.ajax({ 
    type: "POST", url: PackageWSURL + "/GetPackageCountryList", data: "", 
    contentType: "application/json; charset=utf-8", dataType: "json", 
    success: function (response) { 
     var countries = response.d; 
     var group = ""; 
     $('#Package_Country option').each(function (i, option) { $(option).remove(); }); 
     $('#Package_Country').attr('disabled', false); 
     for (var i = 0; i < countries.length; i++) { 
      group = countries[i].Group; 
      if (group != "---") { 
       $("#Package_Country").append("<optgroup label='" + countries[i].Group + "'><option value='" + countries[i].Value + "'>" + countries[i].Display + "</option>"); 
       if (group != countries[i].Group) 
       { $("#Package_Country").append("</optgroup>"); } 
       else { continue; } 

      } 
      else { $("#Package_Country").append("<option value='" + countries[i].Value + "'>" + countries[i].Display + "</option>"); } 


     } 
    } 
}); 

}

所以现在看起来是这样的,而不是

enter image description here

通知亚洲是怎么重复。

回答

0

我想你应该使用optgroup select的特性。如果你可以点你使用(的WebForms,MVC)的技术,我可以进一步帮助

编辑

我会用这个代码

var selectCountries = $("select#Package_Country"); 
for (var i = 0; i < countries.length; i++) { 
    group = countries[i].Group; 
    var optgroupRegion = null; 
    if (group !== "---") { 
     optgroupRegion = selectCountries.find("optgroup[label='" + group + "']"); 
     if (optgroupRegion.length === 0) { 
      optgroupRegion = $("<optgroup></optgroup>").attr("label", group).appendTo(selectCountries); 
     } 
    } 

    $("<option></option>").val(countries[i].Value).text(countries[i].Display).appendTo(optgroupRegion !==  null ? optgroupRegion : selectCountries); 
} 

更新的代码将重用更改一个已经添加的optgroup。

+0

请看看我编辑过的帖子。我不知道现在如何添加RegionCode。预先感谢您 – ymcCole

+0

谢谢你!!!它现在可以工作。 – ymcCole

相关问题