如何对表单下拉列表中的“onchange”和“aspx state”信息做出反应?

时间:2015-01-23 18:27:31

标签: javascript asp.net javascript-events

我认为当我得到一个对onchange事件作出反应的下拉列表时,处理页面刷新的简单模式。

我在后面的vb代码中使用了以下内容(在Load处理程序中):

MyDropDown.Attributes.Add("onchange", "ProcessDDChange(this.value);")

函数ProcessDDChange()是页内javascript,它会为下拉列表的某些值灰显一些其他表单输入。

这样可以正常工作,但是在回发之后,onchange显然没有在恢复上一个状态时触发,因此再次启用禁用的框。

我已经调查了load个事件(页面和下拉列表),但是这两个事件都发生得太早,无法使用,我也看不到任何后续选项。

有没有一种标准的方法可以做到这一点?我需要一个钩子来运行DOM设置后的js函数,发布asp状态恢复。

信息

我正在使用.net 3.5,而我正在寻找跨浏览器解决方案。这不是我的项目,因此我无法添加jQuery(就像我喜欢的那样)或其他库。

2 个答案:

答案 0 :(得分:1)

页面加载时,

onchange不会触发。您需要在页面加载时触发该功能,或者您需要让服务器从一开始就正确设置页面。

答案 1 :(得分:1)

您可以将下拉列表包含在更新面板中,并为epascarello建议的更改事件设置触发器。您是否尝试将其添加到标记中,如

 <asp:DropDownList runat="server" ID="MyDropDown" onchange="ProcessDDChange(this.value);"></asp:DropDownList>

编辑:

所以当你回发时你正在失去onchange监听器,上面的例子应该保留它。但如果没有,你也可以在你希望调用ProcessDDChange的codebehind事件中尝试这个:for vb.net

  ScriptManager.RegisterClientScriptBlock(Me, Me.GetType(), "err", "ProcessDDChange(this.value);", true);

最终编辑:

感谢你坚持我鲍勃,而我试图理解这个问题: 在PageLoad事件完成并构造DOM之后引发document.ready事件。这将是调用ProcessDDChange()的适当位置。

  document.addEventListener("DOMContentLoaded", function(event) { 
      ProcessDDChange(ddlId.selectedValue);
    });