Размножение полей формы
День добрый.
Есть разметка
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<meta http-equiv="Content-Language" content="ru">
</head>
<body>
<form id="tasks" action="taskssave.asp">
<table style="width:70%;border-collapse:collapse;">
<tr>
<th>Тип задачи</th>
<th>Норма времени</th>
<th>Объект привязки</th>
</tr>
<tr>
<td><center><input type="text" name="task_name" required="required"></center></td>
<td>
<center>
<select name="task_len">
<option value="5">5 мин.</option>
<option value="10">10 мин.</option>
<option value="15">15 мин.</option>
<option value="20">20 мин.</option>
<option value="25">25 мин.</option>
<option value="30">30 мин.</option>
<option value="35">35 мин.</option>
<option value="40">40 мин.</option>
<option value="45">45 мин.</option>
<option value="50">50 мин.</option>
<option value="55">55 мин.</option>
<option value="60">60 мин.</option>
<option value="90">90 мин.</option>
<option value="120">120 мин.</option>
<option value="180">180 мин.</option>
</select>
</center>
</td>
<td>
<center>
<select name="task_obj">
<option value="1">Звонки</option>
<option value="2">Контакты</option>
<option value="3">Контрагенты</option>
</select>
</center>
</td>
</tr>
<tr>
<td colspan="3"><br>
<center><input type="submit" name="Сохранить"></center>
</td>
</tr>
</table>
</form>
</body>
</html>
При этом оба раскрывающихся списка генерируются динамически (из БД) VBS-ом. Нужно размножать поля формы, чтобы не вводить задачи по одной. Например по принципу, как здесьhttp://ajaxs.ru/lesson/jq/121-razmno..._na_sajte.html Пробовали сами этот скрипт поправить, но не сумели. |
dpts,
какие имена будут у добавленных, кнопки удалить, добавить, теги thead и tbody где, js или jquery? |
Цитата:
- кнопки - да надо. - thead и tbody - а обязательно? - js |
Цитата:
![]() |
А если так:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<meta http-equiv="Content-Language" content="ru">
</head>
<body>
<form id="tasks" action="taskssave.asp">
<table style="width:70%;border-collapse:collapse;">
<tr>
<th>Тип задачи</th>
<th>Норма времени</th>
<th>Объект привязки</th>
<th> </th>
</tr>
<tr>
<td><center><input type="text" name="task_name" required="required"></center></td>
<td>
<center>
<select name="task_len">
<option value="5">5 мин.</option>
<option value="10">10 мин.</option>
<option value="15">15 мин.</option>
<option value="20">20 мин.</option>
<option value="25">25 мин.</option>
<option value="30">30 мин.</option>
<option value="35">35 мин.</option>
<option value="40">40 мин.</option>
<option value="45">45 мин.</option>
<option value="50">50 мин.</option>
<option value="55">55 мин.</option>
<option value="60">60 мин.</option>
<option value="90">90 мин.</option>
<option value="120">120 мин.</option>
<option value="180">180 мин.</option>
</select>
</center>
</td>
<td>
<center>
<select name="task_obj">
<option value="1">Звонки</option>
<option value="2">Контакты</option>
<option value="3">Контрагенты</option>
</select>
</center>
</td>
<td width="40px">Х<!-- это кнопка для удалить tr и поля в нем--></td>
</tr>
<tr>
<td colspan="2" align="left"><br>
+<!-- это кнопка для добавить tr с полями в нем-->
</td>
<td colspan="2" align="right"><br>
<input type="submit" name="Сохранить">
</td>
</tr>
</table>
</form>
</body>
</html>
|
добавление строки в таблицу
dpts,
<!DOCTYPE HTML>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<meta http-equiv="Content-Language" content="ru">
<style type="text/css">
tbody tr:first-child td:last-child{
visibility: hidden;
}
</style>
</head>
<body>
<form id="tasks" action="taskssave.asp">
<table style="width:70%;border-collapse:collapse;">
<thead>
<tr>
<th>Тип задачи</th>
<th>Норма времени</th>
<th>Объект привязки</th>
</tr>
</thead>
<tbody>
<tr>
<td><center><input type="text" name="task_name" required="required"></center></td>
<td>
<center>
<select name="task_len">
<option value="5">5 мин.</option>
<option value="10">10 мин.</option>
<option value="15">15 мин.</option>
<option value="20">20 мин.</option>
<option value="25">25 мин.</option>
<option value="30">30 мин.</option>
<option value="35">35 мин.</option>
<option value="40">40 мин.</option>
<option value="45">45 мин.</option>
<option value="50">50 мин.</option>
<option value="55">55 мин.</option>
<option value="60">60 мин.</option>
<option value="90">90 мин.</option>
<option value="120">120 мин.</option>
<option value="180">180 мин.</option>
</select>
</center>
</td>
<td>
<center>
<select name="task_obj">
<option value="1">Звонки</option>
<option value="2">Контакты</option>
<option value="3">Контрагенты</option>
</select>
</center>
</td>
<td style="width: 60px;"><img border="0" alt="del" src="http://ajaxs.ru/demo/jq/add_input/delete.png" class="delete"></td>
</tr>
<tr>
<td colspan="4"><br>
<center><input type="button" value="Добавить поле" id="add" onclick="return add_new();">
<input type="submit" name="Сохранить"></center>
</td>
</tr>
</tbody>
</table>
</form>
<script>
window.addEventListener("DOMContentLoaded", function() {
var a = document.querySelector("#tasks"),
b = a.querySelector("tbody"),
d = b.querySelector("tr").cloneNode(!0);
a.querySelector("#add").addEventListener("click", function() {
var c = d.cloneNode(!0);
c.addEventListener("click", function() {
var a = event.target.classList;
a && a.contains("delete") && b.removeChild(c)
});
b.insertBefore(c, b.lastElementChild)
})
});
</script>
</body>
</html>
|
Работает, отлично, спасибо большое
|
когда прикручиваю к страничке перестает работать
1. Суть в том, что на странице кроме это еще вагон таблиц. В том числе и таблица с полями формы живет в DIVе, который тоже живет в таблице, и когда прикрутил
<style type="text/css">
tbody tr:first-child td:last-child{
visibility: hidden;
}
</style>
"все пропало". 2. Временно убрал стили, поменял <img border="0" alt="del" src="http://ajaxs.ru/demo/jq/add_input/delete.png" class="delete"> на <span class="delete"><ul class="icons icons--stroke--header"><li class="iconsmall" style="top:3px;left:20px;"><svg viewbox="0 0 9 9"><use xlink:href="#close" transform="translate(0, 0) scale(.35)"></svg></li></ul></span> получили вот такого вида форму поле загрузки: на форме Плюс в кружочке работает, Галка в кружочке(отправка формы ) - работает. над плюсом появилось текстовое поле с крестиком в кружочке сразу после загрузки, крестик к этому полю работает - удаляет его, а вот крестик справа от строки с тремя полями - не работает... код после правок выглядит так:
<form id="tasks" action="add.asp">
<center>
<table id="table_container" class="setup">
<thead>
<tr>
<th class="setup" style="width: 45%">Тип задачи</th>
<th class="setup">Норма времени</th>
<th class="setup">Привязать объект</th>
<th class="setup-del-row"> </th>
</tr>
</thead>
<tbody>
<tr>
<td class="setup"><center><input size="60" class="big" type="text" name="task_name" required="required"></center></td>
<td class="setup">
<center>
<select name="task_len">
<option value="5">5 мин.</option>
<option value="10">10 мин.</option>
<option value="15">15 мин.</option>
<option value="20">20 мин.</option>
<option value="25">25 мин.</option>
<option value="30">30 мин.</option>
<option value="35">35 мин.</option>
<option value="40">40 мин.</option>
<option value="45">45 мин.</option>
<option value="50">50 мин.</option>
<option value="55">55 мин.</option>
<option value="60">60 мин.</option>
<option value="90">90 мин.</option>
<option value="120">120 мин.</option>
<option value="180">180 мин.</option>
</select>
</center>
</td>
<td class="setup">
<center>
<select name="task_obj">
<option value="1">Звонки</option>
<option value="2">Контакты</option>
<option value="3">Контрагенты</option>
</select>
</center>
</td>
<td class="setup-del-row"><span class="delete"><ul class="icons icons--stroke--header"><li class="iconsmall" style="top:3px;left:20px;"><svg viewbox="0 0 9 9"><use xlink:href="#close" transform="translate(0, 0) scale(.35)"></svg></li></ul></span></td>
</tr>
</tbody>
<tr>
<td colspan="2" align="left">
<span id="add" onclick="return add_new();">
<ul class="icons icons--stroke">
<li class="icon">
<a>
<svg viewbox="0 0 9 9">
<use xlink:href="#add" transform="translate(0, 0) scale(.35)">
</svg>
</a>
</li>
</ul>
</span>
</td>
<td align="right">
<button class="for-svg" type="submit">
<ul class="icons icons--stroke">
<li class="icon" style="top:-19px;left:-11px;">
<svg viewbox="0 0 9 9">
<use xlink:href="#save" transform="translate(0, 0) scale(.35)">
</svg>
</li>
</ul>
</button>
</td>
</tr>
</table>
</form>
<script>
window.addEventListener("DOMContentLoaded", function() {
var a = document.querySelector("#tasks"),
b = a.querySelector("tbody"),
d = b.querySelector("tr").cloneNode(!0);
a.querySelector("#add").addEventListener("click", function() {
var c = d.cloneNode(!0);
c.addEventListener("click", function() {
var a = event.target.classList;
a && a.contains("delete") && b.removeChild(c)
});
b.insertBefore(c, b.lastElementChild)
})
});
</script>
|
https://yadi.sk/i/r5EwEW8Vmb8Di вот так выглядит форма |
С артефактом в виде лишнего поля с крестиком разобрался
Как починить удаление?
|
dpts,
строка 94, 99, 106
<!DOCTYPE HTML>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css">
#table_container tbody tr:first-child td:last-child{
visibility: hidden;
}
</style>
</head>
<body>
<form id="tasks" action="add.asp">
<center>
<table id="table_container" class="setup">
<thead>
<tr>
<th class="setup" style="width: 45%">Тип задачи</th>
<th class="setup">Норма времени</th>
<th class="setup">Привязать объект</th>
<th class="setup-del-row"> </th>
</tr>
</thead>
<tbody>
<tr>
<td class="setup"><center><input size="60" class="big" type="text" name="task_name" required="required"></center></td>
<td class="setup">
<center>
<select name="task_len">
<option value="5">5 мин.</option>
<option value="10">10 мин.</option>
<option value="15">15 мин.</option>
<option value="20">20 мин.</option>
<option value="25">25 мин.</option>
<option value="30">30 мин.</option>
<option value="35">35 мин.</option>
<option value="40">40 мин.</option>
<option value="45">45 мин.</option>
<option value="50">50 мин.</option>
<option value="55">55 мин.</option>
<option value="60">60 мин.</option>
<option value="90">90 мин.</option>
<option value="120">120 мин.</option>
<option value="180">180 мин.</option>
</select>
</center>
</td>
<td class="setup">
<center>
<select name="task_obj">
<option value="1">Звонки</option>
<option value="2">Контакты</option>
<option value="3">Контрагенты</option>
</select>
</center>
</td>
<td class="setup-del-row"><span class="delete"><ul class="icons icons--stroke--header"><li class="iconsmall" style="top:3px;left:20px;"><svg viewbox="0 0 9 9"><use xlink:href="#close" transform="translate(0, 0) scale(.35)"></svg></li></ul></span></td>
</tr>
<tr>
<td colspan="2" align="left">
<span id="add" onclick="return add_new();">
<ul class="icons icons--stroke">
<li class="icon">
<a>
<svg viewbox="0 0 9 9">
<use xlink:href="#add" transform="translate(0, 0) scale(.35)">
</svg>
</a>
</li>
</ul>
</span>
</td>
<td align="right">
<button class="for-svg" type="submit">
<ul class="icons icons--stroke">
<li class="icon" style="top:-19px;left:-11px;">
<svg viewbox="0 0 9 9">
<use xlink:href="#save" transform="translate(0, 0) scale(.35)">
</svg>
</li>
</ul>
</button>
</td>
</tr>
</tbody>
</table>
</form>
<script>
window.addEventListener("DOMContentLoaded", function() {
var a = document.querySelector("#table_container"),
b = a.querySelector("tbody"),
d = b.querySelector("tr").cloneNode(!0);
a.querySelector("#add").addEventListener("click", function() {
var c = d.cloneNode(!0);
c.addEventListener("click", function() {
var a = event.target.classList;
a && a.contains("iconsmall") && b.removeChild(c)
});
b.insertBefore(c, b.lastElementChild)
})
});
</script>
</body>
</html>
|
поправил, - не удаляет :( не реагирует клик по iconsmall
|
dpts,
здесь работает? или сделайте макет в песочнице с вашим css, zip не предлагать. http://plnkr.co/edit/?p=preview |
|
|
|
Чего-то я совсем туплю.
Сделал копипаст с http://embed.plnkr.co/kT8E35IkpvYHw7NJ6MEL/ Пока "кнопка удаления" в виде <span class="iconsmall">X</span>- все работает, удаляет. Как только убираем символ Х и в этот span заворачиваем svg - так сразу перестает удалять |
Нашел где собака зарыта. Из-за того, что svg идет со смещением позиции, клик по иконке - не попадает в область на которую распространяется отслеживание события.
|
Огромное Вам спасибо
|
Задача немного изменилась/усложнилась.
Как говорил раньше, информация берется из БД.
Решение приведенное выше всем устраивает, если в БД нет записей о типах задач. Если в БД есть информация о типах задач, то таблица выглядит примерно так: http://plnkr.co/edit/DEFTx5drBeWakFH85JH2?p=preview Если "говорим" добавить строку с полями, - скрипт добавляет копию 1 строки таблицы со всем ее содержимым (включая значения value у инпутов hidden и text, и selected-ы от options-ов). как сделать так чтоб вместо этого добавлялась строка с полями у которых: 1. У инпута hidden - value="0" 2. У инпута text - value нету 3. У options-ов от обоих select-ов - selected нету то есть вот такую строчку:
<tr>
<td class="setup"><center><<input type="hidden" name="taskid" value="0"><input size="60" class="big" type="text" name="task_name" required="required"></center></td>
<td class="setup">
<center>
<select name="task_len">
<option value="5">5 мин.</option>
<option value="10">10 мин.</option>
<option value="15">15 мин.</option>
<option value="20">20 мин.</option>
<option value="25">25 мин.</option>
<option value="30">30 мин.</option>
<option value="35">35 мин.</option>
<option value="40">40 мин.</option>
<option value="45">45 мин.</option>
<option value="50">50 мин.</option>
<option value="55">55 мин.</option>
<option value="60">60 мин.</option>
<option value="90">90 мин.</option>
<option value="120">120 мин.</option>
<option value="180">180 мин.</option>
</select>
</center>
</td>
<td class="setup">
<center>
<select name="task_obj">
<option value="1">Звонки</option>
<option value="2">Контакты</option>
<option value="3">Контрагенты</option>
</select>
</center>
</td>
<td class="setup-del-row"><span class="delete"><ul class="icons icons--stroke--header"><li class="iconsmall" style="top:4px;left:20px;"><span class="iconsmall">X</span><svg viewbox="0 0 9 9"><use xlink:href="#close" transform="translate(0, 0) scale(.35)"></svg></li></ul></span></td>
</tr>
Пусть у каждой добавляемой строчки value от hidden-а равняется 0 так потом проще будет разбирать, на что добавилось, а что (возможно) поменялось или удалилось |
dpts,
перед вставкой найдите нужные элементы в строке клона и установите желаемые значения.
window.addEventListener("DOMContentLoaded", function() {
var a = document.querySelector("#table_container"),
b = a.querySelector("tbody"),
d = b.querySelector("tr").cloneNode(!0);
a.querySelector("#add").addEventListener("click", function() {
var c = d.cloneNode(!0);
*!*
c.querySelector("[type='hidden']").value = 0;
c.querySelector("[type='text']").value = '';
[].forEach.call( c.querySelectorAll('select'), function(el) {
el.selectedIndex = 0;
});
*/!*
c.addEventListener("click", function(event) {
var a = event.target.classList;
a && a.contains("iconsmall") && b.removeChild(c)
});
b.insertBefore(c, b.lastElementChild)
})
});
|
Благодарю, вроде все хорошо, добавляет как надо, вот только не удаляет строчки, которые были созданы не этим скриптом.
Можно как-то починить? |
dpts,
можно но уже не интересно |
Ясно, и на том спасибо
|
| Часовой пояс GMT +3, время: 07:06. |