JavaScript运行时错误:无法获取未定义或空引用的属性'value'

4
我写了一段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 运行时错误:无法获取未定义或空引用的属性“value”。
请帮助我解决这个问题。
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();");

在哪一行出现了错误? - Mairaj Ahmad
6个回答

2
问题出在这里:
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%>');

1
但是为什么它在Chrome中可以工作呢?对于Chrome解析器来说,它是一个HTML控件? - Rahul Singh
将代码的另一部分放在上面,当用户按下“保存”时,消息应该出现在屏幕上。 - chewie

2

你需要在控件上设置ClientIDMode属性为:

ClientIDMode="Static"

这适用于 .Net 4.0 及以上版本。


3
你能否编辑你的回答并解释为什么你需要那个? - AncientSwordRage

0
问题在于txtDataReferencia1Hidden和txtDataReferencia2Hidden是控件的服务器名称,而不是客户端名称(请查看浏览器源代码)。
使用以下内容:
 var objtxtDataReferencia1Hidden = document.getElementById('<%=txtDataReferencia1Hidden.ClientID%>');


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

客户端上有主页面吗? - MacKentoch

0

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

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

但即使它们为空,你仍然试图获取值。例如:

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

如果“txtDataRefInfo”为空,该语句将返回true并尝试获取值。因此出现未定义或空引用。

0

注释掉这行代码,对于IE浏览器可能没问题:

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

0

这里缺少一个操作: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;


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接