【问题标题】:JavaScript runtime error: Unable to get property 'value' of undefined or null referenceJavaScript 运行时错误:无法获取未定义或空引用的属性“值”
【发布时间】:2015-07-10 04:13:26
【问题描述】:

我写了一段 javascript 代码来显示特定日历的下一个日期

我的功能

function verificaDataReferencia(mensagem)
            {   
                if(document.getElementById("txtDataReferencia1Hidden") == null || document.getElementById("txtDataReferencia2Hidden") == null || document.getElementById("ddlDataPub") == null || document.getElementById("txtDataRefInfo") == null)

                var objtxtDataReferencia1Hidden = document.getElementById("txtDataReferencia1Hidden").value;

                var objtxtDataReferencia2Hidden = document.getElementById("txtDataReferencia2Hidden").value;

                > Breakpoint var objtxtDataArquivo = document.getElementById("ddlDataPub").value;

                var mensagem = document.getElementById("txtDataRefInfo").value;
                if((objtxtDataReferencia1Hidden == objtxtDataArquivo) || (objtxtDataReferencia2Hidden == objtxtDataArquivo))
                {
                    var x = alert(mensagem);
                    return x;
                }
            }

HTML

<asp:TextBox style="Z-INDEX: 112; POSITION: absolute; TOP: 9px; LEFT: 572px" id="txtDataReferencia1Hidden"
                                            runat="server" CssClass="inputLabel" Width="15" Height="15px"></asp:TextBox>
                                        <asp:TextBox style="Z-INDEX: 113; POSITION: absolute; TOP: 9px; LEFT: 606px" id="txtDataReferencia2Hidden"
                                            runat="server" CssClass="inputLabel" Width="14" Height="14px"></asp:TextBox>

问题是页面在 chrome 中运行良好,但是当我在 IE 中运行我的应用程序时,它会抛出错误

0x800a138f - JavaScript 运行时错误:无法获取属性“值” 未定义或空引用

请帮我解决这个问题。

private void Page_Load(object sender, System.EventArgs e)
        {

            if(! IsPostBack)
            {   
                txtNomePortugues.SetFocus();
                BO.Pasta pasta = new BO.Pasta(CodPasta);
                if (CodigoArquivo == 0 && !IsJustificativa && pasta.EnviaEmail)
                    btnGravar.Attributes.Add("onclick", "verificaDataReferencia(); confirmaEnvioEmail('" + GetString("Mensagem_Confirmacao_Alerta_Arquivos") + "');");
                else
                    btnGravar.Attributes.Add("onclick", "verificaDataReferencia();");

【问题讨论】:

  • 在哪一行出现错误?

标签: javascript html asp.net


【解决方案1】:

问题就在这里:

var mensagem = document.getElementById("txtDataRefInfo").value;
var objtxtDataReferencia1Hidden = document.getElementById("txtDataReferencia1Hidden").value;
var objtxtDataReferencia2Hidden = document.getElementById("txtDataReferencia2Hidden").value;

txtDataRefInfotxtDataReferencia1HiddentxtDataReferencia2Hidden 的原因是服务器端控件而不是客户端。试试这个:

var objtxtDataReferencia1Hidden = document.getElementById('<%=txtDataReferencia1Hidden.ClientID%>');
var objtxtDataReferencia2Hidden = document.getElementById('<%=txtDataReferencia2Hidden.ClientID%>');
var mensagem = document.getElementById('<%=txtDataRefInfo.ClientID%>');

【讨论】:

  • 但是它是如何在 Chrome 中工作的呢?对于 Chrome 解析器,它是一个 Html 控件?
  • 把另一部分代码放在上面,当用户按下“保存”时,消息应该会出现在屏幕上
【解决方案2】:

您需要将控件上的ClientIDMode属性设置为:

ClientIDMode="Static"

这适用于 .Net 4.0 及更高版本

【讨论】:

  • 你能编辑你的答案来解释你为什么需要它吗?
【解决方案3】:

为 IE 评论这一行可能没问题:

// > Breakpoint var objtxtDataArquivo = document.getElementById("ddlDataPub").value;

【讨论】:

    【解决方案4】:

    问题在于 txtDataReferencia1Hidden 和 txtDataReferencia2Hidden 是控件的服务器名称,而不是客户端名称(从浏览器查看页面来源)。

    使用这个:


     var objtxtDataReferencia1Hidden = document.getElementById('<%=txtDataReferencia1Hidden.ClientID%>');
    
    
     var objtxtDataReferencia2Hidden = document.getElementById('<%=txtDataReferencia2Hidden.ClientID%>');
    

    【讨论】:

    • 客户端有母版页吗?
    【解决方案5】:

    if(document.getElementById("txtDataReferencia1Hidden") == null || document.getElementById("txtDataReferencia2Hidden") == null || document.getElementById("ddlDataPub") == null || document.getElementById("txtDataRefInfo") == null) 后面缺少一个动作

    我希望你这样写(不要忘记使用! 的否定):

    if(!document.getElementById("txtDataReferencia1Hidden") || !document.getElementById("txtDataReferencia2Hidden") || !document.getElementById("ddlDataPub") || !document.getElementById("txtDataRefInfo")) return;

    【讨论】:

      【解决方案6】:

      您正在检查 if 语句中的元素是否为空 -

      if(document.getElementById("txtDataReferencia1Hidden") == null || document.getElementById("txtDataReferencia2Hidden") == null || document.getElementById("ddlDataPub") == null || document.getElementById("txtDataRefInfo") == null)
      

      但即使它们为 null,您也试图获取该值。例如:

      var mensagem = document.getElementById("txtDataRefInfo").value;
      

      因此,如果 "txtDataRefInfo" 为 null,则该语句将返回 true 并尝试获取该值。因此是未定义或空引用。

      【讨论】:

        猜你喜欢
        • 2014-02-22
        • 2013-10-06
        • 2013-09-30
        • 1970-01-01
        • 1970-01-01
        • 2015-07-07
        • 2017-07-17
        • 2015-02-27
        • 1970-01-01
        相关资源
        最近更新 更多