在加载时,我都调用了一个JavaScript setTimeout()函数,该函数将隐藏.NET Panel控件,并在首次加载时将其隐藏在代码中。单击保存按钮将面板设置为可见,然后重新加载页面,此时调用setTimeout()函数...所以基本上您单击保存,并看到一个面板“详细信息已保存”三秒钟,此时它消失。
问题是外部JavaScript文件找不到_pDivAlert.ClientID(我已调试它并返回null)。它仅在代码位于.aspx页面的标记中时才有效。有关如何将客户端ID传递给HideControl()函数或从外部JS文件中查找ClientID的任何建议?
这是我的代码,有什么建议吗?
<script language="javascript" src="Forms.js" type="text/javascript"></script>
<body onload="ToggleAlert()">
<form id="form1" runat="server">
<script type="text/javascript">
//alert the user that the details were saved
function HideControl() {
var control = document.getElementById('<%=_pDivAlert.ClientID %>');
if(control != null)
control.style.display = 'none';
}
function ToggleAlert() {
setTimeout("HideControl()", 3000);
}
</script>
我也尝试在ToggleAlert()调用中发送ClientID,但这不起作用:
<body onload="ToggleAlert('<%=_pDivAlert.ClientID %>')">
外部JS:
function HideControl(_c) {
var control = _c;
if (control != null)
control.style.display = 'none';
}
function ToggleAlert(_c) {
setTimeout("HideControl(_c)", 3000);
}
答案 0 :(得分:1)
你可以用面板和隐藏它的代码隐藏来显示你的标记吗?
将Visible
属性设置为false并将样式display
属性设置为none之间存在差异 - 第一个属性根本不会呈现元素,这意味着没有使用id呈现任何内容你正在寻找。
编辑:这可能是因为你在超时中调用HideControl
的方式 - 这应该是一个函数而不是一个字符串。
尝试做
function ToggleAlert(_c) {
setTimeout(
function () {
HideControl(_c);
}, 3000);
}
为了清楚起见,当您将字符串传递给setTimeout
时,它会被评估然后运行。 eval生成的代码块将在与ToggleAlert
方法不同的范围内运行,因此_c
将无法在此时使用。
编辑:你还需要实际获得对控件的引用。你将id字符串传递给ToggleAlert
,HideControl
将它转发给function HideControl(_c) { // _c is the id of the element
var control = document.getElementById(_c);
if (control != null)
control.style.display = 'none';
}
,它期待一个对象不是一个字符串。
{{1}}