使用Jquery

时间:2017-02-01 05:57:33

标签: javascript jquery asp.net dropdown

我在asp.net网络表单中有两个连接(链接)下拉列表。

<p>
   <asp:DropDownList runat="server" CssClass="country" ID="ddlCountry" OnSelectedIndexChanged="ddlCountry_SelectedIndexChanged" AutoPostBack="true"></asp:DropDownList>
</p>
<p>
   <asp:DropDownList runat="server" CssClass="city" ID="ddlCity" ></asp:DropDownList>
</p>
<input type="button" class="magicBtn" value="Magic" />

这是剧本

$(document).ready(function () {

            $(".magicBtn").click(function () {

                var obj = { CountryId: "2", CityId: "3" };
                $(".country").val(obj.CountryId).trigger("change");
                $(".city").val(obj.CityId);
            });

        });

当我分配这样的值时,只显示国家/地区下拉列表,然后填充城市下拉列表,但不会显示其值。如果我再次点击magicBtn,则会出现。

我想,只要我点击按钮,就会触发更改事件(__ doPstBack),因此在分配城市值之前,页面正在刷新,但是检索选项,然后通过第二次单击,选项已准备就绪,因此分配是OK。

此时,我很好奇如何将值分配给城市下拉列表。当我看到它在第二次点击时填充时我感到很惊讶,因为我认为只要我点击魔术按钮,{{1回事和城市值分配永远不会发生。所以我认为在第一次点击后,选择了乡村选项,然后第二次点击,检查选项值,如果相同则不回发,所以它可以通过到下面的行分配城市下拉, 然而 当我在开发工具上检查这个时,我看到它确实回发了,虽然选项值这个国家是一样的。所以尽管回发了,城市下拉的分配方式是什么? gif与这个问题有关。)

enter image description here

所以我想要的是,在第一次点击后,国家和城市选项值被分配给选择。

1 个答案:

答案 0 :(得分:0)

第一次单击时,jquery触发器方法会触发回发,页面的load事件,然后触发下拉列表的selectedIndexChanged事件。 selectedIndexChanged事件的内容是

protected void ddlCountry_SelectedIndexChanged(object sender, EventArgs e)
        {
            ddlCity.Items.Clear();
            FillCityDropdown(ddlCity, Convert.ToInt32(ddlCountry.SelectedItem.Value));
        }

因此,在此$(".city").val(obj.CityId);作业之后,也会填充国家/地区下拉列表,因为这项作业在填充之前无法正常工作。

通过第二次点击,再次更改会触发回发,但现在,因为所选的国家/地区下拉列表未更改,其事件未被触发,因此代码隐藏中没有任何反应,但是在客户端上旁边城市下拉人口已经填充,并且分配成真。

解决方案

我解决了这个问题

的Javascript

$(document).ready(function () {

            $(".magicBtn").click(function () {

                var obj = { CountryId: "2", CityId: "3" };
                $(".country").val(obj.CountryId);
                __doPostBack("ddlCountry", obj.CityId);
            });

        });

Index.aspx.cs

 string controlName = "";
 string controlArg = "";

 protected void Page_Load(object sender, EventArgs e)
 {
     controlName = Request.Params.Get("__EVENTTARGET");
     controlArg = Request.Params.Get("__EVENTARGUMENT");
    //..
 }


protected void ddlCountry_SelectedIndexChanged(object sender, EventArgs e)
{
     ddlCity.Items.Clear();
     FillCityDropdown(ddlCity,   Convert.ToInt32(ddlCountry.SelectedItem.Value));
     if (!string.IsNullOrEmpty(controlArg))
         ddlCity.SelectedValue = controlArg;
}