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.
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%>');
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];
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;
}
}
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.