Получить номер недели при нажатии кнопки

У меня есть функция, в которой я хотел получить номер недели сегодняшней даты, но я не могу напечатать значение в своем текстовом поле при нажатии кнопки. Я новичок в javascript, и я отлаживал его в течение нескольких недель. Пожалуйста помоги

function getWeekNumber(d) {
    d = new Date(Date.UTC(d.getFullYear(), d.getMonth(), d.getDate()));
    d.setUTCDate(d.getUTCDate() + 4 - (d.getUTCDay()||7));
    var yearStart = new Date(Date.UTC(d.getUTCFullYear(),0,1));
    var weekNo = Math.ceil(( ( (d - yearStart) / 86400000) + 1)/7);
    return [d.getUTCFullYear(), weekNo];
	document.getElementById("week").value = getWeekNumber(new Date());
	
}
<td>WEEK: </td>
	  <td><input type = "text" value= "" style= "width: 230px; padding-left: 3px" id = "week" name = "week"></td>
          <input type = "button" value = "Get Week" onclick= "getWeekNumber()">

вы называете function getWeekNumber(d) как getWeekNumber() так что d не определено ... что это должно быть?

Jaromanda X 14.06.2019 03:08

Это мой ссылочный код stackoverflow.com/questions/6117814/…

Blue Minnie 14.06.2019 03:10

так? правильно используйте код в этом ответе - к счастью, вы также возвращаетесь до конца функции, так как вы получите бесконечную рекурсию

Jaromanda X 14.06.2019 03:13
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
3
96
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Во-первых, ваша функция "getWeekNumber()" требует параметр d при вызове, но когда вы вызываете ее при нажатии кнопки ввода, вы не даете ей такого параметра. Я думаю, скорее, вам следует настроить прослушиватель событий при нажатии кнопки ввода, а оттуда вы должны вызвать функцию getWeekNumber() и передать ей «новую дату()» в качестве параметра d, чтобы это выглядело как ниже код, где я добавил прослушиватель событий.

Вы также вызывали саму функцию изнутри, но делали это после оператора return, который был излишним. Вместо этого вы должны получить результат weekNo и присвоить ему innerHTML некоторого div, как это сделал я. Я не думаю, что вам следует пытаться заполнить поле ввода, так как это не кажется обычным. Я изменил его на div, чтобы упростить процесс:

let get_week_button = document.getElementById("get_week");

get_week_button.addEventListener("click", function() {
  getWeekNumber(new Date());
});

function getWeekNumber(d) {
  d = new Date(Date.UTC(d.getFullYear(), d.getMonth(), d.getDate()));
  d.setUTCDate(d.getUTCDate() + 4 - (d.getUTCDay() || 7));
  var yearStart = new Date(Date.UTC(d.getUTCFullYear(), 0, 1));
  var weekNo = Math.ceil((((d - yearStart) / 86400000) + 1) / 7);

  document.getElementById("week").value = weekNo;

}
<td>WEEK: </td>
<td>
  <input type = "text" value= "" style= "width: 230px; padding-left: 3px" id = "week" name = "week">
</td>
</tr>
<input id = "get_week" type = "button" value = "Get Week">

Но мне нужно было, чтобы значение было в текстовом поле @Musilix

Blue Minnie 14.06.2019 03:17

Хорошо, если это то, что вам действительно нужно, я отредактировал код, чтобы признать это. Я просто изменил div, который я сделал, на элемент ввода, который вы использовали, и вместо установки innerHTML я установил его атрибут value.

Musilix 14.06.2019 03:20

Все еще не могу заставить его работать. Я что-то пропустил с этим? <script src = "ajax.googleapis.com/ajax/libs/jquery/3.3.1/…> <script src = "maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/…> <script type='text/javascript' src='code.jquery.com/jquery-1.11.0.js'></…

Blue Minnie 14.06.2019 03:23

Это работает в приведенном выше фрагменте. Убедитесь, что ваши js и html указаны в отдельных файлах с правильными расширениями, и убедитесь, что теги script правильно установлены в файле html для ссылки на файл js. Нет необходимости в jQuery, это ванильный js; если вы не используете jQuery для чего-то еще в вашем файле.

Musilix 14.06.2019 03:25

Другие вопросы по теме