Обработка событий и динамические списки.
Всем привет,
Есть форма/таблица с колонкой input поля даты. Даты выбираются из календаря. Часто даты нужно выбирать по дням недели. Сначала, например ввести пять вторников, потом например семь четвергов и т.д. Клиент хочет, чтобы добавили еще одну колонку с выпадающим списком. При каждом выборе даты, определить день недели и запомнить. Если после этого открыть выпадающий список, то его перед открытием динамически заполнить десятком дат с днем недели, как у последней введенной даты. <form name="FormDates" id="fd" method="post" action=""> <div class="row"> <table class="table table-striped table-bordered"> <thead> <tr> <th>Id</th> <th>Name</th> <th>Date</th> <th>Select</th> </tr> </thead> <tbody> <tr> <td>1</td> <td>Name 1</td> <td><input type="date" name="task_date[1]" value=""></td> <td> <select name="select_date[1]"> </select> </td> </tr> <tr> <td>2</td> <td>Name 2</td> <td><input type="date" name="task_date[2]" value=""></td> <td> <select name="select_date[2]"> </select> </td> </tr> <tr> <td>3</td> <td>Name 3</td> <td><input type="date" name="task_date[3]" value=""></td> <td> <select name="select_date[3]"> </select> </td> </tr> </tbody> </table> </div> </form> Собственно вопросы: 1. Как перехватить событие после выбора даты и вызвать функцию, которая обнулит массив дат и заполнит его датами с таким же днем недели? 2. Как при открытии списка, его динамически заполнить датами из массива? 3. После выбора элемента - автоматически заполнить соответствующую дату и отобразить ее? Как-то так. Извините, что слегка путано, только начинаю разбираться с javascriot. Спасибо. |
savsoft,
:-? |
Цитата:
Цитата:
Цитата:
Цитата:
Например так...
<form name="FormDates" id="fd" method="post" action="">
<table class="table table-striped table-bordered">
<thead>
<tr>
<th>Id</th>
<th>Name</th>
<th>Date</th>
<th>Select</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>Name 1</td>
<td><input type="date" name="task_date[1]" value=""></td>
<td>
<select name="select_date[1]"></select>
</td>
</tr>
<tr>
<td>2</td>
<td>Name 2</td>
<td><input type="date" name="task_date[2]" value=""></td>
<td>
<select name="select_date[2]"></select>
</td>
</tr>
<tr>
<td>3</td>
<td>Name 3</td>
<td><input type="date" name="task_date[3]" value=""></td>
<td>
<select name="select_date[3]"></select>
</td>
</tr>
</tbody>
</table>
</form>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.3/css/bootstrap.min.css">
<style>
#fd select:empty {
display: none;
}
#fd table {
table-layout: fixed;
}
</style>
<script>
document.getElementById("fd").addEventListener("input", event => {
const target = event.target;
if(target.matches("[name^=task_date]")) {
const select = target.form.querySelector(`[name="${target.name.replace("task", "select")}"`);
select.textContent = "";
if(!target.value) return;
const date = new Date(target.value);
for(let i = 0; i < 10; i++) {
select.append(new Option(
date.toLocaleDateString(navigator.language),
date.toISOString().replace(/T.+$/, ""))
);
date.setDate(7 + date.getDate());
}
}
});
</script>
|
Цитата:
|
Цитата:
Или другой вариант — постраничная разбивка (pagination) — вместо того, чтобы показывать все результаты, показывайте на странице, например, по 20 за раз. (например, как это сделано в поисковых системах, вам же не всё сразу на странице показывают, а по частям) |
Цитата:
|
| Часовой пояс GMT +3, время: 07:51. |