当发生其他事件时,javascript隐藏的文本框变为可见
当一个下拉列表值被更改(来自ddlSource)时,我有javascript可以隐藏一些文本框,这很好。接下来,当用户在另一个文本框中输入某个值时,我有一个ajax调用来填充几个标签。在加载表单时调用ajax之后,隐藏的文本框现在可见。我哪里出错了当发生其他事件时,javascript隐藏的文本框变为可见,javascript,asp.net,ajax,Javascript,Asp.net,Ajax,当一个下拉列表值被更改(来自ddlSource)时,我有javascript可以隐藏一些文本框,这很好。接下来,当用户在另一个文本框中输入某个值时,我有一个ajax调用来填充几个标签。在加载表单时调用ajax之后,隐藏的文本框现在可见。我哪里出错了 <asp:DropDownList ID="ddlSource" runat="server" TabIndex="80" EnableViewState="True" CssClass="Input"
<asp:DropDownList ID="ddlSource" runat="server"
TabIndex="80" EnableViewState="True" CssClass="Input"
Width="162px" onchange="DisableEnable();">
<asp:ListItem Text="" Value="" />
<asp:ListItem Text="x" Value="x" />
<asp:ListItem Text="y" Value="y" />
</asp:DropDownList>
我的enabledisable的javascript是
function DisableEnable() {
var DropDown_Source = document.getElementById("<%= ddlSource.ClientID %>")
if (DropDown_Source.options[DropDown_Source.selectedIndex].text == "y") {
document.getElementById('txtSupplementNbr').style.visibility = 'visible';
document.getElementById("txtDelDate").style.visibility = 'visible';
document.getElementById('lblSupplementNbr').style.display = '';
document.getElementById('lblDelDate').style.display = '';
}
else {
document.getElementById("txtSupplementNbr").style.visibility = 'hidden';
document.getElementById("txtDelDate").style.visibility = 'hidden';
document.getElementById('lblSupplementNbr').style.display = 'none';
document.getElementById('lblDelDate').style.display = 'none';
}
}
函数禁用启用(){
var DropDown\u Source=document.getElementById(“”)
if(DropDown\u Source.options[DropDown\u Source.selectedIndex].text==“y”){
document.getElementById('txtSupplementNbr')。style.visibility='visible';
document.getElementById(“txtDelDate”).style.visibility='visible';
document.getElementById('lblSupplementNbr')。style.display='';
document.getElementById('lblDelDate')。style.display='';
}
否则{
document.getElementById(“txtSupplementNbr”).style.visibility='hidden';
document.getElementById(“txtDelDate”).style.visibility='hidden';
document.getElementById('lblSupplementNbr')。style.display='none';
document.getElementById('lblDelDate')。style.display='none';
}
}
进行ajax调用的文本框
<asp:UpdatePanel id="UpdatePaneltxtTrialCaseNbr" runat="server">
<ContentTemplate>
<asp:TextBox ID="txtTrialCaseNbr" runat="server" Text="" tabindex="100"
Width="200px" maxlength="120" cssclass="input"
OnTextChanged="GetCaseSummaryCivilPlaintiffInfo"
onblur="SearchTrialCaseNbr();GetCasePlaintiffInfo();"
AutoPostBack="false" />
</ContentTemplate>
</asp:UpdatePanel>
在它执行
OnTextChanged()
函数之后,我看到了以前隐藏的所有控件。任何帮助都将不胜感激。由于ajax请求,html将重新呈现为初始状态。对ajax请求调用DisableEnable()
结束
以更新表单元素的状态
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
function EndRequestHandler(sender, args)
{
DisableEnable();
}
您还可以将所有更改的控件放在“更新”面板中,以便在ajax调用之间由asp.net维护它们的状态。您不需要在切换函数中处理可见性和显示。主要的区别是可见性隐藏了元素,但保持了它的位置,去掉它。显示值应该适合您。这里还有一个更简单的显示切换脚本,向它传递一个对象,它将检查它是否已经显示
function toggle(obj) {
var el = document.getElementById(obj);
if ( el.style.display != 'none' ) {
el.style.display = 'none';
}
else {
el.style.display = '';
}
}
现在,您只需要确保仅在您希望的时候调用它,并且onchange将继续切换显示。我相信@Adil的回答会处理好你问题的这一部分。如果我错了,请纠正我,但更新面板不会只重新呈现其内容模板中的元素吗?当我使用它们时(尽管后来我改用javascript ajax调用),只有引用更新面板中元素的javascript变量需要在endRequest事件中重新定义。更新面板中只有文本框,这并不意味着对所述对象进行任何更改,有点困惑。这正是我的想法。我相信这个问题可能是他的
GetCaseSummaryCivilPrintiffInfo
函数中的一个bug。我看到的主要区别是他在javascript函数之后省略了()
,但我记不起这是否是代码破坏。我让他发布这个函数以防万一。我们能看看你的GetCaseSummaryCivilPrinceInfo
函数的代码吗?