2011-10-27 146 views
3

我有以下的標記:ASP.NET/VB.NET:Dropdownlist SelectedIndexChanged不會觸發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的處理程序觸發索引更改後觸發。如果你把dd2取下onchange="javascript:return true;",它會很好。

有沒有人知道這裏發生了什麼?

編輯:我的第一個回答是,在下拉列表中使用返回表達式不會像按鈕的單擊事件一樣工作,但我發誓我之前使用dropdownlist完成了此操作。

更新:我能夠通過在Javascript中這樣做是爲了迫使服務器事件觸發:

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

我不明白爲什麼我要做到這一點,但它的作品。但是,我仍然想以另一種方式來做,所以如果有人知道,請讓我知道,以便我可以將您標記爲答案。

回答

2

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

我最終做的是檢查函數中的條件。如果屬實,則會觸發此操作:

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

否則,它不。

3

你根本不需要那個。只需將AutoPostBack設置爲true,並且如果您需要將驗證集CausesValidation設置爲false即可。

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

我正在使用驗證? – oscilatingcretin

+0

你問我是否使用驗證?如果頁面上有驗證器,但不希望DropDownList觸發驗證,請將'CausesValidation'設置爲false。否則,只需將'AutoPostBack'設置爲true,並且一切正常。 –

+0

我的示例顯示我已經有AutoPostBack =「true」。我也沒有做任何有關驗證的事情。我只是不想讓服務器端事件觸發,取決於我是否返回true或false。 – oscilatingcretin

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

添加Autopostback="true爲我做了詭計。

0

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

這個工作對我來說...

,這是我的下拉.........

這裏是我的jQuery函數

功能了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; 

} 
0
this is my drop down.. 
<asp:DropDownList ID="ddlbranchname" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddlBranchChanged" 
        onchange="return CheckDate();" CausesValidation="false" CssClass="dropdown"> 
       </asp:DropDownList> 
相關問題