Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Добавление и удаление input (https://javascript.ru/forum/misc/71282-dobavlenie-i-udalenie-input.html)

laimas 07.11.2017 13:44

Nexus,
ну если для такой, то слишком много. :)

Если по уму и тип должен определять клиент, то:

<html>
<head>
<meta charset="utf-8">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<style>
.field:first-child .del {
    display: none;
}
</style>
<script type="text/javascript">
$(function() {
    $('#add').click(function() {
       $('div.field').first()
                     .clone()
                     .appendTo('form')
                     .find('input,select').val('')
                     .end()
                     .find('a').click(function() {
                        $(this).parent().remove()
                     })     
    });
    $('form').submit(function(e) {
        e.preventDefault();
        //....
    })
});
</script>
</head>
<body>
<form>
<div class="field">
            <div class="col_left">
                <div class="border">
                    <input type="text" name="tag[]" required="" value="" placeholder="TAG" />
                </div>
            </div>
            <div class="col_centr">
                <div class="border">
                    <input type="text" name="tag_name[]" required="" value="" placeholder="Название поля" />
                </div>
            </div>
            <div class="col_right">
                <div class="border">
                    <select required="" name="tag_template[]">
                        <option value="">Выберите</option>
                        <option value="1">Текстовое</option>
                        <option value="2">Числовое с переводом числа в текст</option>
                        <option value="3">Срок исполнения</option>
                    </select>
                </div>
            </div>
            <a class="del">Удалить</a>
            <div class="clear"></div>
        </div>
<button>Send</button>
</form>
<a id="add">Добавить</a>
</body>
</html>

Nexus 07.11.2017 13:52

laimas, я сегодня Вас не понимаю :)
Цитата:

Сообщение от laimas
ну если для такой, то слишком много

Если "слишком много" - про кол-во кода, то в наших реализациях принципиальная разница, отсюда и разница в символах.

laimas 07.11.2017 13:59

Nexus,
именно "количество", автору то всего надо клонировать и добавить. :) А "громоздкость" его кода из-за пагубного представления, что field_name_1, field_name_2, это удобно.

skitskis 07.11.2017 14:27

laimas,
Это то что нужно )))
До этого я не работал с передачей массива через input.
На сервере обрабатываю так:
$count = count($_POST['tag'])-1;
    for($i=0;$i<=$count;$i++) {
            $tag[$i]['tag'] = $_POST['tag'][$i];
            $tag[$i]['tag_name'] = $_POST['tag_name'][$i];
            $tag[$i]['tag_template'] = $_POST['tag_template'][$i];
        
    }

Nexus 07.11.2017 14:38

skitskis, можно так:
for($i=0;$i<count($_POST['tag']);$i++)


<?php
	for($i=0;$i<count($_POST['tag']);$i++){
		$tag[$i]=array();
		foreach(array('tag','tag_name','tag_template') as $key)
			$tag[$i][$key]=isset($_POST[$key][$i])?htmlspecialchars($_POST[$key][$i]):null;
    }

laimas 07.11.2017 14:39

Цитата:

Сообщение от skitskis
На сервере обрабатываю так:
$count = count($_POST['tag'])-1;
for($i=0;$i<=$count;$i++) {

Зачем?

skitskis 07.11.2017 14:53

laimas,
я еще это добавляю в сессию, так как у меня есть еще другие поля, и если они не заполнены, мне нужно потом подставить обратно уже заполненные, ну а после уже добавить в базу данных значения. По другому я не знаю как ))

laimas 07.11.2017 15:05

Цитата:

Сообщение от skitskis
я еще это добавляю в сессию, так как у меня есть еще другие поля, и если они не заполнены, мне нужно потом подставить обратно уже заполненные

И что, это повод для того чтобы "перекладывать" данные из одного места в другое, имеется ввиду из массива $_POST в массив $tag? Что это дает? Ничего полезного, если уж и сохранить в сессии, то достаточно $_SESSION['name'] = $_POST, зачем здесь ненужный цикл?

Я не знаю чего еще не заполнено (единственное что можно предположить, это не знаем ID новой записи, но это иной вопрос), но если добавление данных, это этапы, то значит на каждом из них требуется проверка, которую вы обязаны делать - проверка обязательного заполнения, истинность данных (соответствие каждого из наборов). И таковую проверку просто сделать без явных циклов, для этого в РНР масса функций для работы с массивами.

А коли запись в базу, то гораздо полезнее будет подготовить из наборов полей данные для каждой строки в sql-таблице, в которые они будут вставлены. А делается это опять таки просто:

$data = array_map(null, $_POST['tag'], $_POST['tag_name'], $_POST['tag_template']);


Но после того как данные будут проверены и не будет выявлено ошибок.

skitskis 07.11.2017 15:12

laimas,
я понял, спасибо )

laimas 07.11.2017 15:21

Nexus,
htmlspecialchars - не надо этого, вредное занятие при записи в базу.


Часовой пояс GMT +3, время: 21:26.