我认为当我得到一个对onchange
事件作出反应的下拉列表时,处理页面刷新的简单模式。
我在后面的vb代码中使用了以下内容(在Load
处理程序中):
MyDropDown.Attributes.Add("onchange", "ProcessDDChange(this.value);")
函数ProcessDDChange()
是页内javascript,它会为下拉列表的某些值灰显一些其他表单输入。
这样可以正常工作,但是在回发之后,onchange
显然没有在恢复上一个状态时触发,因此再次启用禁用的框。
我已经调查了load
个事件(页面和下拉列表),但是这两个事件都发生得太早,无法使用,我也看不到任何后续选项。
有没有一种标准的方法可以做到这一点?我需要一个钩子来运行DOM设置后的js函数,发布asp状态恢复。
信息
我正在使用.net 3.5,而我正在寻找跨浏览器解决方案。这不是我的项目,因此我无法添加jQuery(就像我喜欢的那样)或其他库。
答案 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);
});