0x800a138f - Ошибка выполнения JavaScript: невозможно получить значение свойства undefined или нулевую ссылку

Я написал код javascript для сравнения 2dates из 2 текстовых полей

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">
 </ajaxtoolkit:calendarextender></asp:textbox></ajaxtoolkit:calendarextender></asp:textbox>

проблема в том, что страница работает хорошо в chrome, но когда я запускаю свое приложение в IE, он выдает ошибку

0x800a138f - Ошибка выполнения JavaScript: невозможно получить значение свойства ' из undefined или нулевой ссылки

пожалуйста, помогите мне преодолеть эту проблему.

4 ответа

Ошибка здесь:

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

Проблема заключается в том, что txtFromDate и txtToDate являются именем сервера элементов управления, а не именем клиента (смотрите источник страницы в браузере).

Попробуйте следующее:

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


Если ваш javascript находится во внешнем JS файле (каким он должен), опубликованные решения не будут работать. Но вы можете дать текстовым полям уникальное имя класса и изменить свой код как таковой:

и ваш javascript:

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


Вам не хватает # для ссылки на идентификатор. Изменить с:

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

в

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

Я ошибся в приведенных выше утверждениях. Я смог исправить ту же ошибку в моем jquery-коде, где мне не хватало #. getElementById не нуждается в этом специальном символе.


Пожалуйста, попробуйте

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

licensed under cc by-sa 3.0 with attribution.