JavaScript运行时错误:无法设置属性

时间:2014-11-20 11:33:10

标签: javascript asp.net

从我的代码编写开始,我设置了一个本地消息陷阱,以便向用户发送消息。陷阱就是这样。

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运行时错误:无法设置属性&lt; innerHTML&#39;未定义或空引用

所以我设置了另一个脚本

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

有效一两次......但不再有...... 我无法理解为什么会发生这种情况......

有人可以帮助我吗?

2 个答案:

答案 0 :(得分:1)

您应确保document.getElementById(TagID)实际返回一个对象。看起来您可能正在使用可以更改ID的ASP.Net。和/或它可能是一个时间问题。元素确实存在但在执行代码时不存在。要解决此问题,请在执行某些事件之前执行javascript代码(document.onload或jQuery有.ready)

此代码示例解决了计时问题和更改ID。

$(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#。这可能会导致其他问题并被视为糟糕的设计。

答案 1 :(得分: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>