我如何对表单下拉列表的 'onchange' 和 'aspx state' 信息作出反应?

How can I react to 'onchange' and 'aspx state' information for a form dropdown?

当我有一个对 onchange 事件作出反应的下拉菜单时,我正在寻找一种在我看来是处理页面刷新的简单模式。

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

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

函数 ProcessDDChange() 位于页内 JavaScript,它使某些下拉列表的某些值的其他表单输入变灰。

这工作正常,但在 post 返回后,onchange 显然不会在恢复以前的状态时触发,因此禁用的框会再次启用。

我已经调查了 load 事件(页面和下拉菜单),但两者都触发得太早而无法使用,我看不到任何后续选项。

有标准的方法吗?我需要一个挂钩 运行 一个 js 函数 post DOM 设置,post asp 状态恢复。

信息

我正在使用 .net 3.5,并且正在寻找跨浏览器解决方案。这不是我的项目,所以我无法添加 jQuery(尽管我很想添加)或其他库。

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

您可以将下拉菜单包装在更新面板中,并像 epascarello 建议的那样设置更改事件的触发器。您是否尝试过将其添加到

之类的标记中
 <asp:DropDownList runat="server" ID="MyDropDown" onchange="ProcessDDChange(this.value);"></asp:DropDownList>

编辑:

所以你在回发时丢失了 onchange 监听器,上面的例子应该保留它。但如果没有,您也可以在您想调用 ProcessDDChange: for vb.net

的代码隐藏事件中尝试此操作
  ScriptManager.RegisterClientScriptBlock(Me, Me.GetType(), "err", "ProcessDDChange(this.value);", true);

最终编辑:

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

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