2013-07-19 22 views
1

標記正確的方式來ASP.net CascadingDropDown的編程方式觸發更改事件使用JavaScript

<asp:ScriptManager runat="server" /> 
Country Code 
<asp:TextBox ID="CoutryCodeTextBox" runat="server" onblur="selectCountry(this.id);"> 
</asp:TextBox> 

<asp:DropDownList ID="CountryDropDownList" runat="server"> 
</asp:DropDownList> 

<ajaxToolkit:CascadingDropDown 
    ID="CountryDropDownListCascadingDropDown" runat="server" 
    TargetControlID="CountryDropDownList" 
    Category="Country" 
    ServiceMethod="GetCountries" 
    ServicePath="~/CountryData.asmx" 
    LoadingText="Loading ..." 
    PromptText="SELECT"> 
</ajaxToolkit:CascadingDropDown> 


<asp:DropDownList ID="CityDropDownList" runat="server"> 
</asp:DropDownList> 
<ajaxToolkit:CascadingDropDown 
    ID="CityDropDownListCascadingDropDown" runat="server" 
    ParentControlID="CountryDropDownList" 
    TargetControlID="CityDropDownList" 
    Category="City" ServiceMethod="GetCities" 
    ServicePath="~/CountryData.asmx" 
    LoadingText="Loading ..." 
    PromptText="SELECT"> 
</ajaxToolkit:CascadingDropDown> 

Web服務(〜/ CountryData.asmx)

[WebService(Namespace = "http://tempuri.org/")] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
[System.ComponentModel.ToolboxItem(false)] 
[ScriptService] 
public class CountryData : System.Web.Services.WebService 
{ 
    [WebMethod] 
    public CascadingDropDownNameValue[] GetCountries(string knownCategoryValues, string category) 
    { 
     List<CascadingDropDownNameValue> values = new List<CascadingDropDownNameValue>(); 

     values.Add(new CascadingDropDownNameValue("United States", "US")); 
     values.Add(new CascadingDropDownNameValue("Canada", "CA")); 

     return values.ToArray(); 
    } 

    [WebMethod] 
    public CascadingDropDownNameValue[] GetCities(string knownCategoryValues, string category) 
    { 
     StringDictionary kv = CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues); 
     string country = kv["Country"]; 

     List<CascadingDropDownNameValue> values = new List<CascadingDropDownNameValue>(); 

     switch (country) 
     { 
      case "US": 
       values.Add(new CascadingDropDownNameValue("California", "CA")); 
       values.Add(new CascadingDropDownNameValue("New York", "NY")); 
       break; 
      case "CA": 
       values.Add(new CascadingDropDownNameValue("Toronto", "TO")); 
       values.Add(new CascadingDropDownNameValue("Montreal", "MO")); 
       break; 
     } 

     return values.ToArray(); 
    } 

} 

jQuery的

var selectCountry = function (id) 
    { 
     var countryCodeTextBox = $("#" + id); 
     var countryDropDownList = $("#CountryDropDownList"); 

     countryDropDownList.val(countryCodeTextBox.val()); 
     countryDropDownList.change(); 
    } 

的javascript函數更改CountryDropDownList的選定值。但是,級聯控件CityDropDownList不會自動填充。

什麼是觸發使用jQuery,使相關的控制(S)能自動級聯父控件更改事件的正確方法?

+0

請問,當你在這裏使用的方法是觸發:http://stackoverflow.com/questions/499405/change-the-selected-value-of-a-drop-down-list-with-jquery –

+0

這正是我在做。它沒有幫助。 –

回答

4

根據你,my answer on How can I trigger an onchange event manually?也解決了你的問題:

有幾個方法可以做到這一點。如果onchange聽者 是通過element.onchange屬性設置功能,你不 不屑關於該事件的對象或起泡/傳播,最簡單的方法 是隻調用該函數:

element.onchange(); 

如果您需要它模擬全是真實發生的,或者如果你通過HTML屬性設置 事件或addEventListener/attachEvent,你 需要做一些特徵檢測的正確觸發事件:

if ("createEvent" in document) { 
    var evt = document.createEvent("HTMLEvents"); 
    evt.initEvent("change", false, true); 
    element.dispatchEvent(evt); 
} 
else 
    element.fireEvent("onchange"); 
+1

你是個搖滾明星安迪。 :d –

+0

恕我直言,這應該由jQuery的實現。 –

相關問題