05.03.2015, 21:51
|
Интересующийся
|
|
Регистрация: 02.03.2015
Сообщений: 17
|
|
Автоматическое добавление полей в форму
Здравствуйте. Для начала, хочу сказать огромное спасибо ребятам, за оперативное решение предыдущей проблемы! Но... теперь есть кое-чего нового.
В общем, вот код:
<table><tr>
<td><input type="text" name="term_1" size="30" placeholder="Термин" /></td>
<td><img src="templates/images/right_uk.png" /></td>
<td><input type="text" name="explan_1" size="100" placeholder="Определение" /></td>
<td><a class="admin_quest_button north" href="#" title="Удалить этот термин"><img src="templates/images/del_q.png" /></a></td>
</tr></table>
<table><tr>
<td><input type="text" name="term_2" size="30" placeholder="Термин" /></td>
<td><img src="templates/images/right_uk.png" /></td>
<td><input type="text" name="explan_2" size="100" placeholder="Определение" /></td>
<td><a class="admin_quest_button north" href="#" title="Удалить этот термин"><img src="templates/images/del_q.png" /></a></td>
</tr></table>
<table><tr>
<td><input type="text" name="term_3" size="30" placeholder="Термин" /></td>
<td><img src="templates/images/right_uk.png" /></td>
<td><input type="text" name="explan_3" size="100" placeholder="Определение" /></td>
<td><a class="admin_quest_button north" href="#" title="Удалить этот термин"><img src="templates/images/del_q.png" /></a></td>
</tr></table>
<a class="add_course_button userpanel_link north menu_class" href="#" title="Добавить поле для ещё одного термина">Добавить термин</a>
Суть состоит в следующем:
При нажатии на ссылку:
<a class="add_course_button userpanel_link north menu_class" href="#" title="Добавить поле для ещё одного термина">Добавить термин</a>
должна добавляться в форму ещё одна таблица, такого вида:
<table><tr>
<td><input type="text" name="term_3" size="30" placeholder="Термин" /></td>
<td><img src="templates/images/right_uk.png" /></td>
<td><input type="text" name="explan_3" size="100" placeholder="Определение" /></td>
<td><a class="admin_quest_button north" href="#" title="Удалить этот термин"><img src="templates/images/del_q.png" /></a></td>
</tr></table>
Имя полей в добавляемой таблице должны быть уникальными и продолжаться в том же порядке 4,5,6..7..n.
Так же, желательно было бы реализовать удаление добавленного элемента (таблицы с полями), вот этой кнопкой:
<a class="admin_quest_button north" href="#" title="Удалить этот термин"><img src="templates/images/del_q.png" /></a>
Я очень плохо разбираюсь в JS. Самому мне это не по силам, если у кого-либо есть время на решение моей проблемы, буду максимально признателен!!! Заранее спасибо!!!
|
|
05.03.2015, 22:33
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Зачем вам тег А, если в него вставляется картинка, по которой можно также щелкнуть как и по тегу А? Вообще зачем ради щелчка использовать тег А?
Если таблицы в форме, то задача добавить/удалить не сложна (с учетом выкинуть ссылки) и вкратце суть такая:
$(function() {
$('form').find('img.north, span').click(function(e) {
if(e.target.tagName=='SPAN') {
var t = $(this.parentNode).find('table:last');
t.after(t.clone())
} else $(this).closest('table').remove();
})
});
<form>
<table><tr>
<td><input type="text" name="term_3" size="30" placeholder="Термин" /></td>
<td><img src="templates/images/right_uk.png" /></td>
<td><input type="text" name="explan_3" size="100" placeholder="Определение" /></td>
<td><img class="admin_quest_button north" title="Удалить этот термин" src="templates/images/del_q.png" /></td>
</tr></table>
<span class="add_course_button userpanel_link north menu_class" title="Добавить поле для ещё одного термина">Добавить термин</span>
</form>
Только вопрос - ну к примеру по примеру добавить следующую нумерацию, это понятно. Но если при элементах 1, 2, 3 удалить элемент 2, то какая нумерация должна быть у добавляемого - 4 или же при удалении 2, нужно элементу 3 сменить нумерацию на 2, а добавляемый будет 3?
|
|
05.03.2015, 23:05
|
Интересующийся
|
|
Регистрация: 02.03.2015
Сообщений: 17
|
|
Сообщение от laimas
|
Только вопрос - ну к примеру по примеру добавить следующую нумерацию, это понятно. Но если при элементах 1, 2, 3 удалить элемент 2, то какая нумерация должна быть у добавляемого - 4 или же при удалении 2, нужно элементу 3 сменить нумерацию на 2, а добавляемый будет 3?
|
Второй вариант. Обработчик POST запроса будет принимать данные по порядку, соответственно, при удалении одного из элементов, скорее всего, придётся изменять нумерацию всех, что бы она была так же по порядку...
|
|
05.03.2015, 23:22
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Обработчик POST запроса будет принимать данные по порядку
В таком случае выгоднее выбросить эту нумерацию из имен и использовать индексы:
<table><tr>
<td><input type="text" name="term[]" size="30" placeholder="Термин" /></td>
<td><img src="templates/images/right_uk.png" /></td>
<td><input type="text" name="explan[]" size="100" placeholder="Определение" /></td>
<td><img class="admin_quest_button north" title="Удалить этот термин" src="templates/images/del_q.png" /></td>
</tr></table>
На сервере будете получать два массива значений term и explan, и на клиенте не надо париться с нумерацией, а код мной показанный это все что нужно вам.
Последний раз редактировалось laimas, 05.03.2015 в 23:34.
|
|
05.03.2015, 23:45
|
Интересующийся
|
|
Регистрация: 02.03.2015
Сообщений: 17
|
|
Чего-то не работает... сначала работало добавление полей, а удаление нет, теперь же, каким-то таинственным образом, не работает не добавление не удаление. Вот код:
<script>
$(function() {
$('form').find('img.north, span').click(function(e) {
if(e.target.tagName=='SPAN') {
var t = $(this.parentNode).find('table:last');
t.after(t.clone())
} else $(this).closest('table').remove();
})
});
</script>
<form action="?do=create_lesson&course_id=[COURSE_ID]" method="post">
<table width="100%"><tr>
<td width="25px"><img src="templates/images/lesson_title.png" /></td><td><input name="lesson_title" type="text" class="title_lesson" placeholder="Название глоссария" /></td>
</tr></table>
<div align="center">
<table><tr>
<td><input type="text" name="term[]" size="30" placeholder="Термин" /></td>
<td><img src="templates/images/right_uk.png" /></td>
<td><input type="text" name="explan[]" size="100" placeholder="Определение" /></td>
<td><img class="admin_quest_button north" title="Удалить этот термин" src="templates/images/del_q.png" /></td>
</tr></table>
<span class="add_course_button userpanel_link north menu_class" title="Добавить поле для ещё одного термина">Добавить термин</span>
</div>
<center><button type="submit" class="auth">Добавить глоссарий</button></center>
</form>
И ещё, по поводу массивов. У меня этот код находится в html файле, который используется движком под шаблон, соответственно, здесь только html. Элементы PHP в этом коде не допустимы... =(
Последний раз редактировалось DVMade, 05.03.2015 в 23:51.
|
|
06.03.2015, 00:00
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
$(function() {
$('form').on('click', 'img.north, span', function(e) {
if(e.target.tagName=='SPAN') {
var t = $(this.parentNode).find('table:last');
t.after(t.clone())
} else $(this).closest('table').remove();
})
});
Потому как динамически добавляются. Но не верно будет в том случае, если есть одна таблица и ее удалить. То есть, надо либо запрещать удаление таблицы, если она одна, либо переносить кнопку "Добавить термин" в форму, а добавление это не метод .after(), а .append() в родительский DIV.
|
|
06.03.2015, 00:06
|
Интересующийся
|
|
Регистрация: 02.03.2015
Сообщений: 17
|
|
Ничего не понял.... Попытался вставить ваш новый скрипт к себе, н овсе так же не работает, можете поправить мой код?
<script>
$(function() {
$('form').on('click', 'img.north, span', function(e) {
if(e.target.tagName=='SPAN') {
var t = $(this.parentNode).find('table:last');
t.after(t.clone())
} else $(this).closest('table').remove();
})
});
</script>
<form action="?do=create_lesson&course_id=[COURSE_ID]" method="post">
<table width="100%"><tr>
<td width="25px"><img src="templates/images/lesson_title.png" /></td><td><input name="lesson_title" type="text" class="title_lesson" placeholder="Название глоссария" /></td>
</tr></table>
<div align="center">
<table><tr>
<td><input type="text" name="1" size="30" placeholder="Термин" /></td>
<td><img src="templates/images/right_uk.png" /></td>
<td><input type="text" name="1" size="100" placeholder="Определение" /></td>
<td><img class="admin_quest_button north" title="Удалить этот термин" src="templates/images/del_q.png" /></td>
</tr></table>
<span class="add_course_button userpanel_link north menu_class" title="Добавить поле для ещё одного термина">Добавить термин</span>
</div>
<center><button type="submit" class="auth">Добавить глоссарий</button></center>
</form>
|
|
06.03.2015, 00:39
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
А что именно не работает? У меня все работает, html ваш, один в один (хотя ой как плохо использовать таблицы ради оформления), если только не учитывать мои последние замечания, а их придется учесть, хотите вы этого или нет.
В общем по логике, должно быть так:
$('form').on('click', 'img.north, span', function(e) {
var t = $(this).closest('div').find('table');
if(e.target.tagName=='SPAN') $(this).before(t.eq(0).clone());
else if(t.length > 1) $(this).closest('table').remove();
})
а не "удаляй, не хочу".
Последний раз редактировалось laimas, 06.03.2015 в 03:27.
|
|
06.03.2015, 10:59
|
Интересующийся
|
|
Регистрация: 02.03.2015
Сообщений: 17
|
|
<script>
$(function() {
$('form').find('img.north, span').click(function(e) {
if(e.target.tagName=='SPAN') {
var t = $(this.parentNode).find('table:last');
t.after(t.clone())
} else $(this).closest('table').remove();
})
});
</script>
<form action="?do=create_lesson&course_id=[COURSE_ID]" method="post">
<table width="100%"><tr>
<td width="25px"><img src="templates/images/lesson_title.png" /></td><td><input name="lesson_title" type="text" class="title_lesson" placeholder="Название глоссария" /></td>
</tr></table>
<div align="center">
<table><tr>
<td><input type="text" name="1" size="30" placeholder="Термин" /></td>
<td><img src="templates/images/right_uk.png" /></td>
<td><input type="text" name="1" size="100" placeholder="Определение" /></td>
<td><img class="admin_quest_button north" title="Удалить этот термин" src="templates/images/del_q.png" /></td>
</tr></table>
<span class="add_course_button userpanel_link north menu_class" title="Добавить поле для ещё одного термина">Добавить термин</span>
</div>
<center><button type="submit" class="auth">Добавить глоссарий</button></center>
</form>
Вот с таким кодом работает добавление, удаление не работает, с Вашей функцией:
$('form').on('click', 'img.north, span', function(e) {
var t = $(this).closest('div').find('table');
if(e.target.tagName=='SPAN') $(this).before(t.eq(0).clone());
else if(t.length > 1) $(this).closest('table').remove();
})
Не работает ничего совсем!
Можете помочь решить вопрос с удалением, а так же нумерацией (я подумал и решил, что нумерация может остаться непоследовательной после удаления какого-либо элемента, это не составит проблемы). Извиняюсь за назойливость, но в JS я совсем ничего не понимаю...
|
|
06.03.2015, 11:13
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
А что исправлять? Все ваше и работает:
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<style>
img, span {
cursor: pointer;
}
</style>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script>
$(function() {
$('form').on('click', 'img.north, span', function(e) {
var t = $(this).closest('div').find('table');
if(e.target.tagName=='SPAN') t.last().after(t.eq(0).clone());
else if(t.length > 1) $(this).closest('table').remove();
})
});
</script>
</head>
<body>
<form action="?do=create_lesson&course_id=[COURSE_ID]" method="post">
<table width="100%"><tr>
<td width="25px"><img src="templates/images/lesson_title.png" /></td><td><input name="lesson_title" type="text" class="title_lesson" placeholder="Название глоссария" /></td>
</tr></table>
<div align="center">
<table>
<tr>
<td><input type="text" name="term[]" size="30" placeholder="Термин" /></td>
<td><img src="templates/images/right_uk.png" /></td>
<td><input type="text" name="explan[]" size="100" placeholder="Определение" /></td>
<td><img class="admin_quest_button north" title="Удалить этот термин" src="templates/images/del_q.png" /></td>
</tr>
</table>
<span class="add_course_button userpanel_link north menu_class" title="Добавить поле для ещё одного термина">Добавить термин</span>
</div>
<center><button type="submit" class="auth">Добавить глоссарий</button></center>
</form>
</body>
</html>
Открыть отладчик в браузере, есть ли ошибки? Что тут может не работать...
я подумал и решил, что нумерация может остаться непоследовательной после удаления какого-либо элемента, это не составит проблемы
Что за ерунда, что значит не последовательной? Если у вас будет три таблицы, то получите на сервере два массива каждый с тремя элементами, индексы элементов массива term будут соответствовать индексам элементов массива explan. Отправьте форму и выполните элементарный print_r($_POST), чтобы убедиться, что думаете вы не верном направлении.
Кстати, [COURSE_ID] - это что такое? Из любопытства )
Последний раз редактировалось laimas, 06.03.2015 в 13:05.
|
|
|
|