禁用下拉列表中某些选项的事件/刷新

时间:2012-09-18 09:34:28

标签: c# javascript asp.net events html-select

这是我的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)"上的代码并未停止使用带按钮的表单时使用的事件。

5 个答案:

答案 0 :(得分:0)

我建议你做演出&amp;使用.net代码隐藏。

例如在VB.net中

将以下代码放入DropDownList1_SelectedIndexChanged1子目录中。

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

而不是在点击/更改事件上有3种不同。

然后删除JS和on change以及客户端点击事件,只需将其保留为onselectedindexchanged =“DropDownList1_SelectedIndexChanged1”

<强>更新

如果您想避免代码中某些事件的回发,请执行以下操作:

如果isPostBack = True

//不要填写表单

否则

//填写表单

结束如果

答案 1 :(得分:0)

这是您可以使用的选项之一。

  1. 从标记中删除选定的索引更改事件。
  2. 关于更改事件,请检查您的验证是否已正确运行。
  3. 如果他们已经运行了ajax请求并做你的事情。

答案 2 :(得分: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;
        } 
    });
});

答案 3 :(得分: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的标志来停止表单提交;

答案 4 :(得分:0)

首先尝试检查javascript函数中的值。

如果未显示selceted值,请使用以下代码

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

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

或使用jQuery

$(&#34; #yourdropdownid选项:已选择&#34;)。text();