Обработка событий и динамические списки.
Всем привет,
Есть форма/таблица с колонкой 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, время: 12:05. |