我有以下标记:
<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 %>", '');
我不明白为什么我必须这样做,但它有效。但是,我仍然想以其他方式这样做,所以如果有人知道,请告诉我,以便我可以将你标记为答案。
答案 0 :(得分:5)
你根本不应该那样做。只需将AutoPostBack
设置为true,如果需要将验证集CausesValidation
转义为false。
<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="true" CausesValidation="false" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged" />
答案 1 :(得分:2)
出于某种原因,我认为您可以通过在客户端的onchange事件上返回false来取消下拉列表的服务器事件,就像使用按钮的onclick事件(例如onclick="javascript:return false;"
)一样。
我最终做的是检查函数中的条件。如果是真的,它就会触发:
__ doPostBack(“&lt;%= dd2.ClientID%&gt;”,'');
否则,它没有。
答案 2 :(得分:1)
<asp:DropDownList ID="page_size" runat="server" **AutoPostBack="true"** OnSelectedIndexChanged="page_size_SelectedIndexChanged">
</asp:DropDownList>
添加Autopostback="true
为我做了诀窍。
答案 3 :(得分:1)
__doPostBack("<%=dd2.ClientID %>", '');
这对我有用。
这是我的下拉:
<asp:DropDownList ID="ddlbranchname" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddlBranchChanged"
onchange="return CheckDate();" CausesValidation="false" CssClass="dropdown">
</asp:DropDownList>
这是我的jquery函数:
function CheckDate() {
var date = document.getElementById('<%= ucDateTimeStart.FindControl("txtDateTime").ClientID %>').value;
if (date == '') {
alert("Please select a valid date.");
return false;
}
else {
__doPostBack("<%=ddlbranchname.ClientID %>", '');
return true;
}
return true;
}