C# 对dropdownlist上的某些选项禁用事件/刷新
这是我的ASP.NET页面的一部分C# 对dropdownlist上的某些选项禁用事件/刷新,c#,javascript,asp.net,events,html-select,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: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插入日期。但也会引发调用服务器的onselectedindexchanged
事件。我想在选择“特定日期”选项时停止事件,但在选择其他选项时运行
OnChange=“return ListChange(this.value)”
上的代码没有像使用带按钮的表单时那样停止事件。我建议您使用.net代码进行显示和隐藏
例如在VB.net中
将以下代码放入DropDownList 1\u SelectedIndexChanged1子菜单中
If DropDownList1.SelectedValue = "1" Then
txtDate.Visible = True
Else
txtDate.Visible = False
End If
而不是有3个不同的点击/更改事件
然后删除JS和on change和on client click事件,只需将其保留为onselectedindexchanged=“DropDownList1\u SelectedIndexChanged1”
更新:
如果要避免代码中某些事件的回发,请执行以下操作:
如果isPostBack=True
//不要填表格
否则
//填表
如果这是您可以使用的选项之一,则结束
您不需要同时调用两个单独的函数。下面是一些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;
}
});
});
默认情况下,如果您给出AutoPostBack=true,ASP.Net将回发 它不考虑返回值 下面是执行时呈现的代码。它使用settimeout和executed\u doPostBack提交表单
onchange="return ListChange(this);setTimeout('__doPostBack(\'ctl00$MainContent$DropDownList1\',\'\')', 0)"
我们需要考虑通过设置一个标志(如Page_IsValid=false)来停止表单提交 首先尝试检查javascript函数中的值 如果未显示所选值,请使用以下代码
var index = document.getElementById(selectItem).selectedIndex;
alert("value =" + document.getElementById(selectItem).value);
alert("text =" + document.getElementById(selectItem).options[index].text);
或者使用jQuery
$(“#您的DropDownId选项:选中”).text() 理想情况下,它应该可以工作,您是否尝试过将其更改为类似onchange=“Javascript:return ListChange(this.value);”的内容,从而停止所有选项的事件:/n按您所说的操作将在每次选择选项时刷新页面。如果他想附加任何代码,SelectIndexChange和AutoPostBack=“True”将始终回发。这就是它的工作原理。感谢您指出,但是我们可以为所选的某些选项禁用回发吗?遗憾的是,如果您想确保表单没有被其他数据填充,请检查isPostBack=True,这将在运行代码之前进行检查。检查我的更新。如果您想避免页面看起来像是在刷新,还可以查看更新面板和内容模板。更新面板和内容模板将使它看起来像什么都没有发生,没有网页闪光。我已经测试。我的javascript正常工作以获取所选值。
var index = document.getElementById(selectItem).selectedIndex;
alert("value =" + document.getElementById(selectItem).value);
alert("text =" + document.getElementById(selectItem).options[index].text);