使用JavaScript以编程方式触发ASP.net CascadingDropDown的更改事件的正确方法

标记

 Country Code           

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 values = new List(); 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 values = new List(); 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在父控件中触发change事件的正确方法是什么,以便相关控件自动级联?

根据你, 我的答案如何手动触发onchange事件? 也解决了你的问题:

有几种方法可以做到这一点。 如果onchange监听器是通过element.onchange属性设置的函数,并且您不会对事件对象或冒泡/传播感到困扰,那么最简单的方法就是调用该函数:

 element.onchange(); 

如果您需要它来完整地模拟真实事件,或者如果您通过html属性或addEventListener / attachEvent设置事件,则需要进行一些function检测以正确触发事件:

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