Получение NaN на Chrome при получении даты - PullRequest
0 голосов
/ 19 октября 2018

У меня есть простой код для проверки даты.Если Пуск> Конец дата, появится предупреждение.Даты поступают из запроса в классе модели.Я отображаю и редактирую их в классе просмотра.Сначала у меня была проблема с доступом к идентификаторам, но после решения этой проблемы я продолжаю получать NaN на дату.

Просмотр класса:

 @if (item.Start!= null)
   {
     @Html.Hidden("Row_Status", 0)
        <td class="strt"> @Html.EditorFor(x => item.Start, "Start_Date", new { HtmlAttributes = new { @id = "Start_Date" } })</td>
   }

<td>@Html.DisplayFor(x => item.End, "End_Date", new { HtmlAttributes = new { @id = "End_Date" } })</td>

JavaScript:

 $(document).ready(function () {
            $("td.strt").bind("change", function () {
                console.log("here");
                var cur_td = $(this).parent("tr.home");
                console.log("here now");
                var QA_date = cur_td.find("td.End_Date").val();
                console.log(QA_date);
                var test = new Date(QA_date).getTime();
            console.log(test);
     });
});

Вывод:

The output on google chrome

В любом случае, чтобы решить это?Спасибо за помощь!

Ответы [ 3 ]

0 голосов
/ 19 октября 2018

Это довольно просто.

В ваших журналах консоли третий вывод - [Объектный объект] (который не является числом).

В вашем коде вы используете это оченьтот же объект, что и параметр для конструктора Date ().Поскольку конструктор Date () не знает, как справиться с этим, он терпит неудачу, и тогда getTime() также терпит неудачу.Когда это происходит, конструктор Date () возвращает NaN по своему замыслу.

Основной причиной является следующий код:

var QA_date = cur_td.find("td.End_Date").val();

Поскольку td узлы DOM не имеют свойства value/ атрибут, это не работает.

Если строка даты находится внутри td, сделайте следующее:

var QA_date = cur_td.find("td.End_Date").text();
0 голосов
/ 19 октября 2018

Без просмотра ваших данных это сложнее отладить, но я думаю, что ваша ошибка может быть из-за того, что ваш объект Date не может правильно проанализировать ваш строковый параметр.

Я бы построил дату более структурированным образом, какследует:

// assumes parameter date is in format dd-mm-yyy, adjust accordingly

function getDateFromString(dateString) {

    var returnDate = new Date();
    var splitDateString = dateString.split('-');

    returnDate.setDate(splitDateString[0]);
    returnDate.setMonth(parseInt(splitDateString[1]) - 1); // jscript date months begin at 0
    returnDate.setFullYear(splitDateString[2]);

    return returnDate;
}

Редактировать:

Как указал Рэнди Кэсберн, окончательная ошибка здесь - попытка получить значение (val ()) из элемента td.Вам нужно использовать текст () вместо.Я бы по-прежнему рекомендовал создавать ваши объекты дат вручную, хотя

0 голосов
/ 19 октября 2018

QA_date не получает правильное значение вашего ввода.Проверьте ваши селекторы в соответствии с вашим HTML-кодом.«td.End_Date» выбирает тег td с классом End_Date , я уверен, что это не то, что вы хотите.Посмотрите следующий пример, чтобы проверить разницу в селекторах CSS.Один из них имеет пробел между div и .sample , а другой - не

// inputContent equals to "2018-01-01"
var inputContent = $('div .sample').val();
console.log("This is the content of the input :" + inputContent ) ;

// divContent equals to empty string ""
var divContent = $('div.sample').val();
console.log("This is the content of the div :" + divContent) ;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div class="sample">
      <input type="text" value="2017-01-01" /> 
</div>
<div> 
    <input type="text" class="sample" value="2018-01-01" /> 
</div>

Кроме того, проверьте свои селекторы, точечный (. ) селектор предназначен для выбора элемента с помощью атрибута класса, в соответствии с вашимКод Razor, я думаю, вам может быть лучше использовать селектор # , который выбирает элемент в соответствии с атрибутом ID, например, 'td # End_Date'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...