Автоматическое добавление полей в форму
Здравствуйте. Для начала, хочу сказать огромное спасибо ребятам, за оперативное решение предыдущей проблемы! Но... теперь есть кое-чего нового.
В общем, вот код: <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. Самому мне это не по силам, если у кого-либо есть время на решение моей проблемы, буду максимально признателен!!! Заранее спасибо!!! |
Зачем вам тег А, если в него вставляется картинка, по которой можно также щелкнуть как и по тегу А? Вообще зачем ради щелчка использовать тег А?
Если таблицы в форме, то задача добавить/удалить не сложна (с учетом выкинуть ссылки) и вкратце суть такая:
$(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? |
Цитата:
|
Обработчик 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, и на клиенте не надо париться с нумерацией, а код мной показанный это все что нужно вам. |
Чего-то не работает... сначала работало добавление полей, а удаление нет, теперь же, каким-то таинственным образом, не работает не добавление не удаление. Вот код:
<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 в этом коде не допустимы... =( |
$(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. |
Ничего не понял.... Попытался вставить ваш новый скрипт к себе, н овсе так же не работает, можете поправить мой код?
<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>
|
А что именно не работает? У меня все работает, 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();
})
а не "удаляй, не хочу". |
<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 я совсем ничего не понимаю... |
А что исправлять? Все ваше и работает:
<!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] - это что такое? Из любопытства ) |
| Часовой пояс GMT +3, время: 20:49. |