簡體   English   中英

ASP.NET / VB.NET:Dropdownlist SelectedIndexChanged沒有用onchange =“javascript:return true;”觸發

[英]ASP.NET/VB.NET: Dropdownlist SelectedIndexChanged not firing with onchange=“javascript:return true;”

我有以下標記:

<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" />

出於某種原因,我認為您可以通過在客戶端的onchange事件上返回false來取消下拉列表的服務器事件,就像您可以使用按鈕的onclick事件一樣(例如, onclick="javascript:return false;" )。

我最終做的是檢查函數中的條件。 如果是真的,它會觸發:

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

否則,它沒有。

<asp:DropDownList ID="page_size" runat="server" **AutoPostBack="true"** OnSelectedIndexChanged="page_size_SelectedIndexChanged">
                            </asp:DropDownList>

添加Autopostback="true為我做了訣竅。

__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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM