Правильный способ программного запуска Trigger Change Event 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>
Веб-сервис (~/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, чтобы связанный элемент управления (ов) был автоматически каскадирован?
Ответы
Ответ 1
По вашему мнению, мой ответ о том, как я могу инициировать событие onchange вручную? также решает вашу проблему:
Есть несколько способов, которыми вы можете это сделать. Если слушатель 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");