Jquery ddl改变事件不触发

本文关键字:事件 ddl 改变 Jquery | 更新日期: 2023-09-27 18:18:19

我使用。net 4和JQuery来显示/隐藏div,这取决于从DDL中选择的内容。当我手动单击下拉菜单时,Jquery会按预期触发并显示/隐藏字段。但是,当我以编程方式更改DDL的selectedValue时,Jquery不会触发。我有一个单独的ddl,有两个选项,单个和循环,我显示选中的div,并保持另一个隐藏。

$(document).ready(function () {
    $("#MainContent_ddlScheduleType").change(function () {
        $('#Single').hide();
        $('#Recurring').hide();
        var newSelection = "#" + this.value;
        $(newSelection).fadeIn('slow');
    });
});

在实际页面中有两个下拉字段,第一个是数据库表中当前所有Jobs的列表。这些作业运行一次或多次(单个、循环)。用户从第一个下拉列表中选择作业的名称。存储过程从数据库中提取该作业的信息,并将其存储在客户端变量中。然后比较客户端变量来决定是否应该更改下拉菜单。这是完成大部分工作的事件处理程序。综上所述,当你从第一个下拉菜单中选择任务时,第二个下拉菜单应该改变以反映它是重复出现的还是单一的(这成功地发生了!),但是Jquery实际上并没有显示它应该显示的单个/重复出现的Div。

        protected void ddlJobList_SelectedIndexChanged(object sender, EventArgs e)
    {
        string  Frequency = null;
        SqlParameter sqlParameter = new SqlParameter("@JobName", ddlJobList.SelectedItem.Text);
        DataTable dt = SqlHelper.GetDataTable("zzGetJobInformation", CommandType.StoredProcedure, sqlParameter);
        if (!(dt.Rows[0]["Frequency"] is DBNull))
            Frequency = dt.Rows[0]["Frequency"].ToString();
        if (Frequency == null)
            ddlScheduleType.SelectedValue = "Single";
        else
            ddlScheduleType.SelectedValue = "Recurring";
    }

为什么这不会导致Jquery着火?

我看这里:jQuery下拉列表更改event not fire

虽然我不使用MVC,我有以前,所以我可以关联的代码,看起来非常类似于我。不幸的是,"解决方案"的链接不再有效,他们的回答也不是很有描述性。我可以肯定地说,在firebug中没有报告控制台/javascript错误。

Jquery ddl改变事件不触发

好了,这就更好地解释了。混淆是由于混合了服务器和客户端代码。我建议使用其中一个来管理下拉列表和效果,而不是同时使用。

两者都使用意味着你必须处理回发,webforms事件和维护客户端(jquery)和服务器(.net)的状态,这是混乱的。

我要么使用webforms来管理UI的状态,要么使用jquery和ajax请求与页面方法,asmx,或其他类型的asp.net处理程序来管理UI的状态。

这是竞争条件吗?在什么时候以编程方式设置所选值?美元(文档)。Ready会等到相当晚的时候(相对于生命周期而言)才执行,这样它就知道您试图访问的所有内容都在$(document)中。准备就绪…

如果您任意设置所选值而不是在文档中。准备好了,您可以在创建事件之前调用它。