Jquery ddl更改事件未触发

时间:2011-12-20 14:49:16

标签: c# javascript jquery .net .net-4.0

我正在使用.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');
    });
});

在实际页面内部有两个下拉字段,第一个是当前数据库表中所有作业的列表。这些作业要么运行一次,要么多次运行(单次,重复)。用户从第一个下拉列表中选择作业的名称。存储过程从数据库中提取该作业的信息,并将其存储在客户端变量中。然后我比较该客户端变量以决定是否应该更改下拉列表。这是执行大部分工作的事件处理程序。总而言之,当您从第一个下拉列表中选择作业时,第二个下拉列表应该更改以反映它是否正在进行或单个(这发生成功!)但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 drop down list change event not fire

虽然我之前没有使用过MVC,但我之前也可以将代码与我看起来非常相似。不幸的是,“解决方案”的链接不再有效,他们的答案不是很具描述性。我可以肯定地说,在firebug中没有报告控制台/ javascript错误。

2 个答案:

答案 0 :(得分:1)

这是竞争条件吗?您在什么时候以编程方式设置所选值? $(document).ready等到很晚才执行(相对于生命周期),以便它知道你在$(document).ready中试图访问的所有东西都已经渲染了......

如果您在document.ready中任意设置了所选值,则可以在创建事件之前调用它。

答案 1 :(得分:1)

好的,这解释得好一点。混淆是混合服务器和客户端代码。我建议使用其中一个来管理下拉列表并影响,而不是两者。

使用这两种方法你必须处理回发,webforms事件并维护客户端(jquery)和服务器(.net)上的状态,这很麻烦。

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