2012-09-18 89 views
1

這是我的ASP.NET頁面的一部分。在某些選項上禁用事件/刷新下拉列表

<asp:DropDownList ID="DropDownList1" runat="server" 
      OnChange="return ListChange(this.value)" 
      onselectedindexchanged="DropDownList1_SelectedIndexChanged1" 
      AutoPostBack="True" > 
      <asp:ListItem Selected="True">Today</asp:ListItem> 
      <asp:ListItem>Yesterday</asp:ListItem> 
      <asp:ListItem Value="1">Specific Day</asp:ListItem> 
      <asp:ListItem>All Time</asp:ListItem> 
</asp:DropDownList> 
<asp:TextBox ID="txtDate" runat="server"></asp:TextBox> 

這是Javascript。

function ListChange(txtVal) { 
    if (txtVal != 1) { 
     document.getElementById("txtDate").setAttribute("style", "visibility:hidden;"); 
     return true; 
    } 
    else { 
     document.getElementById("txtDate").setAttribute("style", "visibility:visible;"); 
     return false; 
    } 
} 

這裏的目標是根據用戶選擇的選項顯示某些數據。在特定日期選項中,向用戶顯示文本框以通過javascript插入日期。但是onselectedindexchanged事件也引發了對服務器的調用。我想在選擇「特定日期」選項時停止事件,但在選擇其他選項時運行。

OnChange="return ListChange(this.value)"上的代碼並未停止使用帶有按鈕的表單時使用的事件。

+0

理想情況下,它應該工作,你嘗試通過改變它像onchange =「Javascript:return ListChange(this.value);」 –

+0

即停止所有選項的事件:/ – Ruchan

回答

0

我建議你使用.net代碼隱藏顯示&隱藏。

例如在VB.net

將以下代碼在DropDownList1_SelectedIndexChanged1子。

If DropDownList1.SelectedValue = "1" Then 
     txtDate.Visible = True 
    Else 
     txtDate.Visible = False 
    End If 

而不是有3個不同的點擊/更改事件。

然後取出JS和對變化和客戶端點擊事件,只是onselectedindexchanged =「DropDownList1_SelectedIndexChanged1」離開它

UPDATE:

如果你想避免回發於某些事件的代碼辦:

如果的IsPostBack =真

//不要填寫表格的東西

否則

//填寫表格的東西

結束如果

+0

這就是使用javascript的全部要點。 – Ruchan

+0

有什麼意義? –

+0

按照您的說法進行操作將在每次選擇選項時刷新頁面。 – Ruchan

0

它是可以使用的選項之一。

  1. 從標記中刪除選定的索引更改事件。
  2. on change event,檢查您的驗證是否正確運行。
  3. 如果他們已經運行了ajax請求並且做你的東西。
0

你不需要同時調用兩個獨立的函數。這裏有一些jquery代碼只需幾行就可以實現。

$(document).ready(function(){ 
    $('#DropDownList1').change(fnction(){ 
     if($(this).text() != 'Specific Day') { 
      document.getElementById("txtDate").setAttribute("style", "visibility:hidden;"); 
      return true; 
     } else { 
      document.getElementById("txtDate").setAttribute("style", "visibility:visible;"); 
      return false; 
     } 
    }); 
}); 
+0

請正確地閱讀問題。這沒有幫助 – Ruchan

0

默認情況下,如果您給AutoPostBack = true ASP.Net將回發。

它不考慮返回值。

下面是在執行時呈現的代碼。它使用setTimeout和執行_doPostBack提交表單

onchange="return ListChange(this);setTimeout(&#39;__doPostBack(\&#39;ctl00$MainContent$DropDownList1\&#39;,\&#39;\&#39;)&#39;, 0)" 

我們需要考慮停止形式通過設置像Page_IsValid = false一個標誌提交;

+0

我不知道該怎麼做。 – Ruchan

0

首先嚐試檢查您的javascript函數中會出現什麼值。

如果其未示出selceted值使用下面的代碼

var index = document.getElementById(selectItem).selectedIndex; 

    alert("value =" + document.getElementById(selectItem).value); 
    alert("text =" + document.getElementById(selectItem).options[index].text); 

或使用jQuery

$( 「#yourdropdownid選項:選擇」)。文本();

+0

我測試過了。我的JavaScript工作正確,以獲得選定的值。 – Ruchan

相關問題