我正在使用.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错误。
答案 0 :(得分:1)
这是竞争条件吗?您在什么时候以编程方式设置所选值? $(document).ready等到很晚才执行(相对于生命周期),以便它知道你在$(document).ready中试图访问的所有东西都已经渲染了......
如果您在document.ready中任意设置了所选值,则可以在创建事件之前调用它。
答案 1 :(得分:1)
使用这两种方法你必须处理回发,webforms事件并维护客户端(jquery)和服务器(.net)上的状态,这很麻烦。
我要么使用webforms来管理UI的状态,要么使用jquery和ajax请求与页面方法,asmx或其他类型的asp.net处理程序来管理UI的状态。