javascript - ASP.NET/VB.NET : Dropdownlist SelectedIndexChanged not firing with onchange ="javascript:return true;"

标签 javascript asp.net events drop-down-menu onchange

我有以下标记:

<asp:DropDownList ID="dd1" AutoPostBack="true" runat="server">
    <asp:ListItem Value="1">1</asp:ListItem>
    <asp:ListItem Value="2">2</asp:ListItem>
</asp:DropDownList>
<asp:DropDownList ID="dd2" AutoPostBack="true" onchange="javascript:return true;" runat="server">
    <asp:ListItem Value="1">3</asp:ListItem>
    <asp:ListItem Value="2">4</asp:ListItem>
</asp:DropDownList>

连接到这里:

Protected Sub changed1(sender As Object, e As EventArgs) Handles dd1.SelectedIndexChanged

End Sub

Protected Sub changed2(sender As Object, e As EventArgs) Handles dd2.SelectedIndexChanged

End Sub

当 dd2 的索引改变时,你会期望它的处理程序被触发,对吧?好吧,事实并非如此。相反,它会“排队”并在 dd1 的处理程序在其索引更改时触发后触发。如果你拿 onchange="javascript:return true;"关闭 dd2,它会正常启动。

有人知道这里发生了什么吗?

编辑:我的第一个答案是在下拉列表上使用返回表达式与按钮的单击事件不同,但我发誓我以前在下拉列表中这样做过。

更新:我可以通过在 Javascript 中执行此操作来强制触发服务器事件:

__doPostBack("<%=dd2.ClientID %>", '');

我不明白为什么我必须这样做,但它有效。但是,我还是想换一种方式,所以如果有人知道,请告诉我,以便我将您标记为答案。

最佳答案

你根本不需要它。只需将 AutoPostBack 设置为 true,如果您需要转义验证,请将 CausesValidation 设置为 false。

<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="true" CausesValidation="false" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged" />

关于javascript - ASP.NET/VB.NET : Dropdownlist SelectedIndexChanged not firing with onchange ="javascript:return true;",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7918628/

相关文章:

asp.net - 在javascript中设置资源字符串

c# - Entity Framework 与直接数据访问

c# - 分配给事件的 lambda 是否会阻止所属对象的垃圾回收?

javascript - 检查向量是否在线的另一边

c# - 获取 ASP.NET System.Web.UI.WebControls.PlaceHolder 的内容

javascript - 按列选择行值

javascript - 为什么表单输入未定义?

javascript - 全局 javascript 事件拦截/处理

javascript - 函数应该在 jQuery 的扩展内部还是外部?

javascript - Codeigniter session flashdata 和 ajax