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)"使用带有按钮的表单时,代码不会像过去那样停止事件。

4

5 回答 5

0

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

如果它没有显示选择值,请使用以下代码

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

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

或使用 jQuery

$("#yourdropdownid option:selected").text();

于 2012-09-18T10:27:45.527 回答
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;
        } 
    });
});
于 2012-09-18T09:54:16.837 回答
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 的标志来停止表单提交;

于 2012-09-18T09:58:01.773 回答
0

我建议您使用 .net 代码进行显示和隐藏。

例如在 VB.net

将以下代码放入 DropDownList1_SelectedIndexChanged1 子中。

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

而不是有 3 个不同的点击/更改事件。

然后删除 JS 和 on change 和 on client click 事件,只留下 onselectedindexchanged="DropDownList1_SelectedIndexChanged1"

更新:

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

如果 isPostBack = True

//不要填写表单的东西

别的

//填写表格的东西

万一

于 2012-09-18T09:44:35.987 回答
0

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

  1. 从标记中删除选定的索引更改事件。
  2. 在更改事件上,检查您的验证是否正确运行。
  3. 如果他们已经运行 make ajax 请求并做你的事情。
于 2012-09-18T09:44:58.200 回答