2012-09-18 43 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

相关问题