2014-11-20 4 views
0

С самого начала написания кода я установил ловушку Локального сообщения в случае отправки сообщений пользователю. Ловушка такова.Ошибка выполнения JavaScript JavaScript: невозможно установить свойство

Dim message As String = Nothing 
     message = "bla bla bla" 
     UserBirthDate.Text = Nothing 
     LocalErrorMessage("InnerMessages", message) 
     btnClr.Visible = True 
     Return 

Public Sub LocalErrorMessage(DivID As String, Message As String) 
     errorCall = False 
     Dim cstype As Type = Me.GetType() 
     Dim innerMess As String = Message 
     Dim url As String = HttpContext.Current.Request.Url.AbsoluteUri 
     Dim script As String = "InnerMessages('" + DivID + "', '" + innerMess + "')" 
     If Not Page.ClientScript.IsStartupScriptRegistered(Me.GetType(), "MessageDiv") Then 
      Page.ClientScript.RegisterStartupScript(cstype, "MessageDiv", script, True) 
     End If 
    End Sub 

Я также установил небольшой скрипт java в начале моего кода.

<script type="text/javascript"> 
    function InnerMessages(TagID, mess) { 
     document.getElementById(TagID).innerHTML = mess + '<br/><hr/>'; 
     } 
    </script> 

Все проблемы работают нормально ... и я должен продолжить писать свой код (который является страницей регистрации пользователя). Все идет нормально до сегодняшнего дня ... Когда я увидел сообщение один раз ... и работает отлично ... так как на этот раз никогда не работает снова ...
Всегда бросить мне ошибку

JavaScript runtime error: Unable to set property 'innerHTML' of undefined or null reference

Так я поставил другой сценарий

<script type="text/javascript"> 
    window.onload = getTag() 
    function getTag() { 
     var pWin = window.parent.document; 
     return pWin; 
    } 

И я был изменить первоначальный один

</script> 
    <script type="text/javascript"> 
    function InnerMessages(TagID, mess) { 
    var myTD = getTag(); 
    var t = myTD.forms.Form.childNodes; 
    var s = t['355'].childNodes['0'].nodeValue; 
    document.getElementById(TagID).innerHTML = mess + '<br/><hr/>'; 
     } 
    </script> 

Это работает один или два раза ... но не больше ...
Я не могу понять, почему это происходит ...

Есть ли кто-нибудь, кто может мне помочь?

ответ

0

Я, наконец, использовать следующий сценарий, чтобы решить мою проблему

<asp:Panel ID="ErrorPanel" runat="server" CssClass="RegErrPanel" Enabled="true" ViewStateMode="Enabled"> 
     <div id="LocalMessages" runat="server" title="LocalError Messages" class="regErrorDiv"> 
     <script type="text/javascript"> 
      function InnerMessages(TagID, mess) { 
       var t = window.document.forms.Form.getElementsByTagName('div') 
       t[TagID].innerHTML = mess + '<br/><hr/>'; 
      } 
     </script> 
     </div> 
     <br /><br /> 
    <asp:ValidationSummary ID="RegisterValidationSummary" runat="server" CssClass="RegValidSummary" ValidationGroup="SetUserValGroup" ForeColor="Red" /> 
    <asp:Button ID="btnClr" runat="server" Text="Καθαρισμός" Visible="false" OnClientClick="<%btnClr_Click%>" CssClass="RegErrCleanUp" /> 
     </asp:Panel> 
+0

У вас есть сочетание интерфейсного и внешнего кода, это не очень чистое и может быть трудно читать в будущем. Не критиковать только то, что нужно утомлять. Также это: OnClientClick = "<% btnClr_Click%>", вероятно, должно быть <% = btnClr_Click%>, но мы не можем действительно сказать из фрагмента кода –

1

Вы должны убедиться, что document.getElementById (TagID) фактически возвращает объект. Похоже, вы можете использовать ASP.Net, который может изменить идентификатор. И/Или это может быть вопрос времени. Где элемент существует, но не во время выполнения кода. Чтобы решить эту проблему, не выполняйте код javascript до тех пор, пока не пройдет какое-либо событие (document.onload или jQuery имеет .ready)

Этот пример кода решает проблему синхронизации и изменяющийся идентификатор.

$(document).ready(init); 

function init() { 
    //code here executes after the page is loaded  
    $("#textBox1").val("This might not work, as the id of the control might have changed."); 
    $("input[id$='textBox1']").val("This is more likely to work since asp prefixes the id"); 
    $(".someClass").val("Using a css class is more a more typical jQuery approach"); 
    $("<%= textBox1.ClientID %>").val("Force asp.net to fix the id, however (see below)") 
} 
  • Проблема с последним подходом является то, что ваш файл ASPX теперь имеет C# в нем. Это может привести к другим проблемам и считать плохой дизайн.
+0

Да Я использую ASP.NET. В onload jquery я искал pWin = window.ready? в петле вроде while - next ??? или! –

+0

Я собираюсь настроить свой комментарий, чтобы правильно форматировать код. –

+0

Hooo да, это проблема с этим ... Ну, наконец, я решаю свою проблему, которая также работает и на других объектах ... например Images ... где вместо «div» я устанавливаю asp: Image. .. Большое спасибо за ваши усилия. –

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