Внешний файл JavaScript asp.net не находит Control.ClientID - PullRequest
0 голосов
/ 25 июня 2010

При загрузке я вызываю функцию JavaScript setTimeout (), которая скрывает элемент управления .NET Panel, и скрывает его в коде при первой загрузке. Нажатие на кнопку «Сохранить» сделает панель видимой, а затем перезагрузит страницу, и в этот момент вызывается функция setTimeout (), поэтому вы нажимаете кнопку «Сохранить» и в течение трех секунд видите панель с «Подробности сохранены», после чего она исчезает.

Проблема в том, что внешний файл JavaScript не может найти _pDivAlert.ClientID (я отладил, и он возвращает ноль). Это работает только тогда, когда код находится в теге на странице .aspx. Любые предложения о том, как я могу передать идентификатор клиента в функцию HideControl () или найти ClientID из внешнего файла JS?

Вот мой код, есть предложения?

<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>

Я также пытался отправить ClientID в вызове ToggleAlert (), но это не сработало:

<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 Ответ

1 голос
/ 25 июня 2010

Вы можете показать свою разметку с панелью и кодом, где вы ее скрываете?

есть разница между установкой свойства Visible в значение false и установкой атрибута стиля display в none - первый не будет отображать элемент вообще, то есть с идентификатором, который вы просматриваете, ничего не отображается для.

edit: возможно, из-за того, как вы вызываете HideControl во время ожидания, это должна быть функция вместо строки.

попробуйте сделать

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

просто для ясности, когда вы передаете строку в setTimeout, она оценивается и затем запускается. блок кода, который создает eval, будет работать в другом диапазоне, чем ваш ToggleAlert метод, поэтому _c будет недоступен в то время.

edit: вам также нужно получить ссылку на элемент управления. вы передаете строку идентификатора в ToggleAlert, которая передает его в HideControl, который ожидает объект, а не строку.

function HideControl(_c) { // _c is the id of the element
    var control = document.getElementById(_c);
    if (control != null)
        control.style.display = 'none';
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...