2015-01-08 4 views
1

Я пытаюсь запустить кусок JavaScript после загрузки страницы:Null справки из управления после загрузки страницы

protected void Page_LoadComplete(object sender, EventArgs e) 
    { 
     if (IsPostBack) 
     { 
      string controlName = getPostBackControlName(); 
      if (controlName == "btnSubmit" || controlName == "ddlSalary") 
      { 
       Page.ClientScript.RegisterStartupScript(GetType(), "myAlertScript", "onLoadDisplay(this)", true); 
      } 
     } 
    } 

Вот ссылка JavaScript:

function onLoadDisplay(sender) { 
     PerDiemClicked(sender); 
    } 

    function PerDiemClicked(sender) { 
     if (document.getElementById('<%= chkbxPerDiem.ClientID %>').checked == true) { 
      document.getElementById("PerDiemDisplay").style.display = 'inline'; 
     } 
     else { 
      document.getElementById("PerDiemDisplay").style.display = 'none'; 
     } 
    } 

Я получаю эту ошибку :

0x800a138f - JavaScript runtime error: Unable to get property 'checked' of undefined or null reference

Я не понимаю, почему проверенный возвращается null, потому что я жду, когда страница будет завершена. P перед проверкой. Как проверить этот элемент управления и правильно запустить приведенный выше код?

редактировать: здесь флажок:

<asp:CheckBox ID="chkbxPerDiem" runat="server" Checked="false" onclick="PerDiemClicked(this)" /> 
+0

Является ли это javascript на aspx или в отдельном файле js? –

+0

В настоящее время он находится в файле aspx. –

+1

вы подтвердили, что '<% = chkbxPerDiem.ClientID%>' отображает и если этот идентификатор существует или нет? –

ответ

2

Ваш сценарий, вероятно, выполняется до chkbxPerDiem был добавлен в DOM. Выполните скрипт в окне load event:

window.addEventListener("load", function() { 
    onLoadDisplay(this); 
}); 

Попробуйте это:

Page.ClientScript.RegisterStartupScript(GetType(), "myAlertScript", @"   
window.addEventListener('load', function() { 
    onLoadDisplay(this); 
});", true); 

См this answer

+0

Получение одинакового исключения: 0x800a138f - Ошибка выполнения JavaScript: не удалось получить свойство «проверено» неопределенной или нулевой ссылки –

+1

@DavidTunnell, что является фактическим отображаемым выходом для этого раздела скрипта: 'document.getElementById ('<% = chkbxPerDiem.ClientID %> ') '? – canon

+0

(document.getElementById ('ContentPlaceHolderBody_chkbxPerDiem'). Checked == true) –

0

Page_LoadComplete является стороны сервера события, и всех стороны сервера события будут выполняться до страница ровная отправлено в браузер. Помните, что эти серверные события связаны с построением страницы. Вам нужно запустить свой JavaScript после того, как страница была построена, обслуживается и полностью загружена браузером. Это означает, что событие Page_LoadComplete выполняется задолго до того, как ваш код JavaScript может работать.

Page.ClientScript.RegisterStartupScript(GetType(), "myAlertScript", "onLoadDisplay(this)", true); 

Приведенный выше код регистрирует вызов функции загрузки JavaScript. Но он будет вставлять вызов этой функции в верхней части страницы. Таким образом, он будет запущен до загрузки остальной страницы.

Вам необходимо просмотреть, как работают события ASP.NET. Опять же, все серверные события запускаются до того, как страница будет отправлена ​​в браузер. JavaScript не должен запускаться до тех пор, пока браузер не получит и не загрузит страницу.

+0

Если кто-то собирается опросить ответ, попробуйте и попробуйте, чтобы указать, в чем заключается ваша жалоба. Я не понимаю, почему это было приостановлено. В нем было высказано принципиальное недоразумение о том, что ОП была выражением. –

0

Вот как я это решил.

Этого код делает фактически пост после загрузки страницы:

protected void Page_LoadComplete(object sender, EventArgs e) 
    { 
     if (IsPostBack) 
     { 
      string controlName = getPostBackControlName(); 
      if (controlName == "btnSubmit" || controlName == "ddlSalary") 
      { 
       Page.ClientScript.RegisterStartupScript(GetType(), "myAlertScript", "window.addEventListener('load', function() { onLoadDisplay(this); });", true); 
      } 
     } 
    } 

Я должен был изменить яваскрипт функции, чтобы проверить, если он существует до проверки, является ли его Проверили:

function PerDiemClicked(sender) { 
     if (document.getElementById('<%= chkbxPerDiem.ClientID %>') != null) { 
      if (document.getElementById('<%= chkbxPerDiem.ClientID %>').checked == true) { 
       document.getElementById("PerDiemDisplay").style.display = 'inline'; 
      } 
      else { 
       document.getElementById("PerDiemDisplay").style.display = 'none'; 
      } 
     } 
    } 

Спасибо всем.

+1

Если эта нулевая проверка была необходима после перемещения кода в событие загрузки, я могу только предположить, что у вас есть что-то, что переключает ['Visible'] (http://msdn.microsoft.com/en-us/library/system .web.ui.control.visible% 28v = vs.100% 29.aspx) свойство серверного элемента управления или его родителя ... – canon

Смежные вопросы