asp.net外部JavaScript文件找不到Control.ClientID

时间:2010-06-25 19:21:43

标签: asp.net javascript clientid

在加载时,我都调用了一个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);
}

1 个答案:

答案 0 :(得分:1)

你可以用面板和隐藏它的代码隐藏来显示你的标记吗?

Visible属性设置为false并将样式display属性设置为none之间存在差异 - 第一个属性根本不会呈现元素,这意味着没有使用id呈现任何内容你正在寻找。

编辑:这可能是因为你在超时中调用HideControl的方式 - 这应该是一个函数而不是一个字符串。

尝试做

function ToggleAlert(_c) {
    setTimeout( 
        function () { 
            HideControl(_c); 
        }, 3000);
}

为了清楚起见,当您将字符串传递给setTimeout时,它会被评估然后运行。 eval生成的代码块将在与ToggleAlert方法不同的范围内运行,因此_c将无法在此时使用。

编辑:你还需要实际获得对控件的引用。你将id字符串传递给ToggleAlertHideControl将它转发给function HideControl(_c) { // _c is the id of the element var control = document.getElementById(_c); if (control != null) control.style.display = 'none'; } ,它期待一个对象不是一个字符串。

{{1}}