2010-06-25 2 views
0

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

Проблема заключается в том, что внешний файл JavaScript не может найти _pDivAlert.ClientID (я отлаживал и возвращает null). Он работает только тогда, когда код находится в теге на странице .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

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

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

Редактировать: возможно, из-за того, что вы вызываете 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'; 
} 
+0

Спасибо за ответ. Я создал функцию HideControl(), и теперь я вижу идентификатор элемента управления во внешнем JS. Но теперь, когда отладка я вижу, что «стиль» в «control.style.display =« none »« не определен ». – Barryman9000

+0

Я отредактировал мое сообщение, чтобы ответить на этот вопрос в вашем комментарии. – lincolnk

+0

Ницца! Это сделало это, спасибо! – Barryman9000