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

时间:2014-01-30 13:14:11

标签: javascript html asp.net

我写了一个javascript代码来比较来自2个文本框的2dates

     function CompareDates() {
            var fdate = document.getElementById('txtFromDate');
            var edate = document.getElementById('txtToDate');
            var FromDate = fdate.value.split('/');
            var EndDate = edate.value.split('/');
            var val = 'false';

            if (parseInt(FromDate[2]) < parseInt(EndDate[2])) {
                val = 'true';
                return true;
            }
            else if (parseInt(FromDate[2]) == parseInt(EndDate[2])) {
                if (parseInt(FromDate[0]) < parseInt(EndDate[0])) {
                    val = 'true';
                    return true;
                }
                else if (parseInt(FromDate[0]) == parseInt(EndDate[0])) {
                    if (parseInt(FromDate[1]) <= parseInt(EndDate[1])) {
                        val = 'true';
                        return true;
                    }
                }
            }
            if (val == "false") {
                alert("FromDate Always Less Than ToDate");
                return false;
            }
        }

和html代码是

     <asp:TextBox ID="txtFromDate" runat="server" Width="150px" />
     <ajaxToolkit:CalendarExtender CssClass="MyCalendar" runat="server"
                                   ID="ceFromDate"
                                   TargetControlID="txtFromDate"
                                   Format="dd/MM/yyyy" />
    <asp:TextBox ID="txtToDate" runat="server" Width="150px" />
    <ajaxToolkit:CalendarExtender CssClass="MyCalendar" runat="server" 
                                  ID="ceToDAte"
                                  TargetControlID="txtToDate"
                                  Format="dd/MM/yyyy" />

     <asp:Button ID="btnGenerate" runat="server" CssClass="button"
                 Text="Generate" OnClientClick="if(!CompareDates()) return false;" 
                 OnClick="btnGenerate_Click" />

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

  

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

请帮助我克服这个问题。

4 个答案:

答案 0 :(得分:9)

错误在于:

    var fdate = document.getElementById('txtFromDate');
    var edate = document.getElementById('txtToDate');

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

试试这个:

    var fdate = document.getElementById('<%=txtFromDate.ClientID%>');
    var edate = document.getElementById('<%=txtToDate.ClientID%>');

答案 1 :(得分:2)

如果您的javascript位于外部JS文件中(它应该),则发布的解决方案将无效。但是你可以给文本字段一个唯一的类名,并修改你的代码:

<asp:TextBox ID="txtFromDate" runat="server" Width="150px" CssClass="txtFromDate" />
<asp:TextBox ID="txtToDate" runat="server" Width="150px" CssClass="txtToDate" />

和你的javascript:

var fdate = document.getElementsByClassName('txtFromDate')[0];
var edate = document.getElementsByClassName('txtToDate')[0];

答案 2 :(得分:0)

请试试这个

 document.getElementById('<%=txtFromDate.ClientID %>')

更改您的代码如下:

function CompareDates() {
    var fdate = document.getElementById('<%=txtFromDate.ClientID %>');
    var edate = document.getElementById('<%=txtFromDate.ClientID %>');
    var FromDate = fdate.value.split('/');
    var EndDate = edate.value.split('/');
    var val = 'false';

    if (parseInt(FromDate[2]) < parseInt(EndDate[2])) {
        val = 'true';
        return true;
    }
    else if (parseInt(FromDate[2]) == parseInt(EndDate[2])) {
        if (parseInt(FromDate[0]) < parseInt(EndDate[0])) {
            val = 'true';
            return true;
        }
        else if (parseInt(FromDate[0]) == parseInt(EndDate[0])) {
            if (parseInt(FromDate[1]) <= parseInt(EndDate[1])) {
                val = 'true';
                return true;
            }
        }
    }
    if (val == "false") {
        alert("FromDate Always Less Than ToDate");
        return false;
    }
}

答案 3 :(得分:0)

您错过{id}引用的# 改变自:

var fdate = document.getElementById('txtFromDate'); 

为:

var fdate = document.getElementById('#txtFromDate');

我对上述陈述错了 我能够在我的jquery代码中修复相同的错误,我错过了#getElementById不需要这个特殊字符。