【问题标题】:How can I react to 'onchange' and 'aspx state' information for a form dropdown?我如何对表单下拉列表的“onchange”和“aspx state”信息做出反应?
【发布时间】:2015-01-23 18:27:31
【问题描述】:

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

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

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

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

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

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

有这样做的标准方法吗?我需要一个钩子来运行 js 函数 post DOM setup,post asp state restore。

信息

我正在使用 .net 3.5,我正在寻找一个跨浏览器的解决方案。这不是我的项目,所以我不能添加 jQuery(就像我想的那样)或其他库。

【问题讨论】:

    标签: javascript asp.net javascript-events


    【解决方案1】:

    您可以将下拉菜单包装在更新面板中,并像 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);
    

    最终编辑:

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

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

    【讨论】:

    • 感谢您抽出宝贵时间回复。将onchange 事件添加到控件中没有问题。我的问题是我需要在回发之后触发相同的 js 方法(并且在构造 DOM 并且 asp 恢复了保存的状态之后)。
    • 不,我不会丢失事件监听器。对不起,如果我给你这样的印象。我在某些其他输入字段上丢失了disabled 属性,因此我想在回发页面加载完成后调用ProcessDDChange() 函数(如果需要,这将恢复它们)。我想知道是否唯一的方法是在后面的代码中复制函数并在服务器处理回发期间插入禁用的属性。
    • 嗯好的,那你需要在window.onload或者document.ready事件中调用ProcessDDChange。
    • 谢谢。我使用了document.ready 事件,我之前不知何故未能看到它,它工作正常!如果您更改答案以反映在构造 DOM 并恢复 asp 状态后引发此事件,那应该回答我原来的问题,我很乐意接受它。
    【解决方案2】:

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

    【讨论】:

    • 感谢您的回复。当我问这个问题时,我有点理解这一切。我真的在寻找指向(希望是标准的)技术的指针,以实际执行您的建议。说到 asp,我还是个新手。
    • RegisterStartUpScript 并触发元素上的更改事件。 stackoverflow.com/questions/2856513/…
    • 我想我知道你要去哪里了,但是RegisterStartupScript is run before onload 注册的脚本被提出来了,这本身还为时过早,无法处理恢复的状态数据。
    猜你喜欢
    • 2021-11-07
    • 2018-12-23
    • 2020-04-27
    • 1970-01-01
    • 1970-01-01
    • 2013-02-16
    • 2018-06-12
    • 2011-11-03
    • 2016-04-04
    相关资源
    最近更新 更多