web-dev-qa-db-fra.com

0x800a138f - Erreur d'exécution JavaScript: impossible d'obtenir la propriété 'valeur' ​​d'une référence non définie ou nulle

j'ai écrit un code javascript pour comparer 2dates de 2 zones de texte

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

et le code html est

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

le problème est que la page fonctionne bien en chrome, mais lorsque je lance mon application dans IE, une erreur est générée. 

0x800a138f - Erreur d'exécution JavaScript: impossible d'obtenir la propriété 'valeur' ​​ de référence non définie ou nulle

aidez-moi s'il vous plaît à surmonter ce problème.

4
akvickyit7

L'erreur est ici:

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

Le problème est que txtFromDate et txtToDate sont le nom du serveur des contrôles, pas le nom du client (regardez la source de la page dans le navigateur).

Essaye ça:

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

Si votre javascript est situé dans un fichier JS externe (ce qui devrait être le cas), les solutions publiées ne fonctionneront pas. Mais vous pouvez attribuer un nom de classe unique aux champs de texte et modifier votre code en tant que tel:

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

et votre javascript:

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

S'il vous plaît essayer ceci 

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

Changez votre code comme suit:

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;
    }
}
0
Afnan Ahmad

Il vous manque le # pour votre référence d'identifiant.
Changer de:

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

à:

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

Je me suis trompé sur les déclarations ci-dessus.
J'ai pu corriger la même erreur dans mon code jQuery où il me manquait le #. getElementById n'a pas besoin de ce caractère spécial.

0
user6678799