ASP.NET/VB.NET:Dropdownlist SelectedIndexChanged未使用onchange=";javascript:返回true&引用;

ASP.NET/VB.NET:Dropdownlist SelectedIndexChanged未使用onchange=";javascript:返回true&引用;,javascript,asp.net,events,drop-down-menu,onchange,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" Aut

我有以下标记:

<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>
当dd2的索引更改时,您会期望它的处理程序启动,对吗?嗯,没有。相反,它会“排队”,并在dd1的处理程序在其索引更改时触发后触发。如果您将
onchange=“javascript:return true;”“
从dd2上取下,它将正常启动

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

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

更新:我可以使用Javascript强制触发服务器事件:

\uu doPostBack(“,”)


我不明白我为什么要这样做,但它是有效的。不过,我还是想用另一种方式来做,所以如果有人知道,请让我知道,这样我就可以把你标记为答案。

你根本不需要这个。只需将
AutoPostBack
设置为true,如果需要退出验证,则将
CausesValidation
设置为false

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

出于某种原因,我认为可以通过在客户端的onchange事件上返回false来取消下拉列表的服务器事件,就像使用按钮的onclick事件一样(例如,
onclick=“javascript:return false;”“

我最后做的是检查函数中的条件。如果为true,则激发以下命令:

__doPostBack(“,”)

否则,它不会。


<asp:DropDownList ID="page_size" runat="server" **AutoPostBack="true"** OnSelectedIndexChanged="page_size_SelectedIndexChanged">
                            </asp:DropDownList>
Add
Autopostback=“true
帮了我的忙。

\uu doPostBack(“,”);
__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;
}
函数检查日期(){
var date=document.getElementById(“”).value;
如果(日期=“”){
警报(“请选择有效日期”);
返回false;
}
否则{
__doPostBack(“,”);
返回true;
}
返回true;
}

你是在问我你是否在使用验证吗?如果你确实在页面上有验证程序,但你不希望DropDownList触发验证,请将
CausesValidation
设置为false。否则,只需将
AutoPostBack
设置为true,一切正常。我的示例显示我已经有AutoPostBack=“true”“。我也没有做任何验证。我只是不希望服务器端事件根据我是否返回true或false而触发。也许我很困惑。。。你想做什么?问题出在哪里?
AutoPostBack=“true”
帮我解决了问题。
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;
}