【问题标题】:Disable event/refresh on certain Options on dropdownlist在下拉列表中的某些选项上禁用事件/刷新
【发布时间】:2012-09-10 13:17:17
【问题描述】:

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

【问题讨论】:

  • 理想情况下它应该可以工作,您是否尝试将其更改为类似 onchange="Javascript:return ListChange(this.value);"
  • 停止所有选项的事件:/

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


【解决方案1】:

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

例如在 VB.net 中

将以下代码放入 DropDownList1_SelectedIndexChanged1 sub.

   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

//不要填写表格的东西

其他

//填写表格的东西

如果结束

【讨论】:

  • 按你说的做,每次选择一个选项都会刷新页面。
  • 好吧,如果他想附加任何代码 SelectIndexChange 并且 AutoPostBack="True" 它总是回发。这就是它的工作原理。
  • 感谢您的指出,但是我们可以禁用所选选项的回发吗?
  • 遗憾的是,如果您想确保表单没有被其他数据填充,请检查 isPostBack = True,它将在运行代码之前进行检查。检查我的更新。
  • 如果您想避免页面看起来令人耳目一新,还可以查看更新面板和内容模板。更新面板和内容模板将使它看起来像什么都没有发生,没有页面闪烁。
【解决方案2】:

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

  1. 从标记中删除选定的索引更改事件。
  2. 在更改事件时,检查您的验证是否正确运行。
  3. 如果他们已运行 make ajax 请求并执行您的操作。

【讨论】:

    【解决方案3】:

    您不需要同时调用两个单独的函数。这是一些 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;
            } 
        });
    });
    

    【讨论】:

      【解决方案4】:

      默认情况下,如果您给 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 的标志来停止表单提交;

      【讨论】:

        【解决方案5】:

        首先尝试检查您的 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();

        【讨论】:

        • 我已经测试过了。我的 javascript 可以正常工作以获取所选值。
        猜你喜欢
        • 2015-05-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-05
        • 1970-01-01
        • 1970-01-01
        • 2018-11-18
        • 1970-01-01
        相关资源
        最近更新 更多