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

skitskis 07.11.2017 12:21

Добавление и удаление input
 
Добрый день!
Работаю с php и к сожалению не владею знаниями программирования на jquery.
Задача состоит в том что надо добавлять и удалять блоки с input и считать их количество, добавление проходит нормально, подсчет идет верный, но вот при удалении считает неверно.
Например, добавил 5 блоков, он посчитал их верно, показал цифру 5, нажал удалить один, стало 4 но цифру все ровно показывает 5, удалил еще один, стало 3, цифру показывает 5.

Html:
<!--------- Строка начало --------->
        <div class="field">
            <div class="col_left">
                <div class="border">
                    <input type="text" name="tag_1" value="" placeholder="TEG" />
                </div>
            </div>
            <div class="col_centr">
                <div class="border">
                    <input type="text" name="tag_name_1" value="" placeholder="Название поля" />
                </div>
            </div>
            <div class="col_right">
                <div class="border">
                    <select type="radio" name="tag_template_1">
                        <option value="0">Текстовое</option>
                        <option value="1">Числовое с переводом числа в текст</option>
                        <option value="2">Срок исполнения</option>
                    </select>
                </div>
            </div>
            <div class="clear"></div>
        </div>
        <!--------- Строка конец --------->
        <div class="inputs">
    
        </div>
        <input id="last_numer" name="" value="1">


Script:
<script>

    
$(document).ready(function(){


	var i = 2;
	
	$('#add').click(function() {
            $('\n\
    \n\
<!--------- Строка начало --------->\n\
        <div class="field">\n\
            <div class="col_left">\n\
                <div class="border">\n\
                    <input type="text" name="tag_' + i + '" value="" placeholder="TEG" />\n\
                </div>\n\
            </div>\n\
            <div class="col_centr">\n\
                <div class="border">\n\
                    <input type="text" name="tag_name_' + i + '" value="" placeholder="Название поля" />\n\
                </div>\n\
            </div>\n\
            <div class="col_right">\n\
                <div class="border">\n\
                    <select type="radio" name="tag_template_' + i + '">\n\
                        <option value="0">Текстовое</option>\n\
                        <option value="1">Числовое с переводом числа в текст</option>\n\
                        <option value="2">Срок исполнения</option>\n\
                    </select>\n\
                </div>\n\
            </div>\n\
            <div class="clear"></div>\n\
        </div>\n\
        <!--------- Строка конец --------->\n\
\n\
').fadeIn('slow').appendTo('.inputs');
                document.getElementById('last_numer').value = i;
		i++;
	});
	
	$('#remove').click(function() {
            $('.field:last').remove();
            i--;
            document.getElementById('last_numer').value = i;
            
	});
	

// here's our click function for when the forms submitted
	
	$('.submit').click(function(){
								
	
	var answers = [];
    $.each($('.field'), function() {
        answers.push($(this).val()); 
    });
	
    if(answers.length == 0) { 
        answers = "none"; 
    }   

	alert(answers);
	
	return false;
								
	});

    

});

</script>

laimas 07.11.2017 12:27

skitskis,
нужно добавлять клонированный <div class="field"> со всем его содержимым. И именование полей мягко сказать не очень. Это затем отправляется на сервер ведь?

Вставлять в html код \n бессмысленно.

рони 07.11.2017 12:27

skitskis,
где кнопки добавить и удалить?

skitskis 07.11.2017 12:30

Цитата:

Сообщение от рони (Сообщение 469433)
skitskis,
где кнопки добавить и удалить?

ой, да.
<!--------- Строка начало --------->
        <div class="form_group">
            <div class="col_left">
            <a href="#" id="add">Добавить</a> | <a href="#" id="remove">Удалить</a> 
            <div class="clear"></div>
        </div>
        <!--------- Строка конец --------->

рони 07.11.2017 12:33

skitskis,
строки 38 и 39 поменять местами и строка 7 var i = 1;

рони 07.11.2017 12:36

Цитата:

Сообщение от skitskis
ой, да.

тогда ещё в оба клика добавить .click(function(event) {
event.preventDefault();

laimas 07.11.2017 12:36

рони,
не надо ничего менять, это нужно выбрасывать, так как и для именования полей это вредно, и для подсчета не нужно, достаточно посчитать элементы ".field", если надо.

skitskis 07.11.2017 12:37

Цитата:

Сообщение от laimas (Сообщение 469432)
skitskis,
нужно добавлять клонированный <div class="field"> со всем его содержимым. И именование полей мягко сказать не очень. Это затем отправляется на сервер ведь?

Вставлять в html код \n бессмысленно.


так у меня и добавляется <div class="field"> и все содержимое, или я что то не понял. Да, потом отправляю на сервер.

laimas 07.11.2017 12:42

Цитата:

Сообщение от skitskis
так у меня и добавляется <div class="field"> и все содержимое, или я что то не понял.

Не надо ничего добавляемого описывать:

$('div.field').first().clone()....


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

tag[], tag_nam[], ....

И получите массив в $_POST.

skitskis 07.11.2017 12:43

Цитата:

Сообщение от laimas (Сообщение 469437)
рони,
не надо ничего менять, это нужно выбрасывать, так как и для именования полей это вредно, и для подсчета не нужно, достаточно посчитать элементы ".field", если надо.

да, можно и посчитать элементы ".field", мне просто нужно понимать количество полей, я потом буду пробегать циклом for. Но как мне вытащить это значение? просто скрип я не писал, я его кусками собрал из интернета...


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