Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Подсчет количества элементов в блоке (https://javascript.ru/forum/misc/60144-podschet-kolichestva-ehlementov-v-bloke.html)

рони 02.10.2017 15:26

the_little,
если все четыре блока имеют класс step2-blocks, то это код повторять не надо
$(function() {
    $(".step2-blocks").each(function(indx, el) {
        var add = $(".add", el),
            num = add.length;
            del = $(".delbutton", el),
            n = 1;

        function show() {
            del.toggle(num > n)
        }
        show();
        $(".addbutton", el).on("click", function() {
            ++num
            show()
        });
        del.on("click", function() {
            num--;
            show()
        })
    })
});

the_little 02.10.2017 15:49

Цитата:

Сообщение от рони (Сообщение 466283)
the_little,
если все четыре блока имеют класс step2-blocks, то это код повторять не надо
$(function() {
    $(".step2-blocks").each(function(indx, el) {
        var add = $(".add", el),
            num = add.length;
            del = $(".delbutton", el),
            n = 1;

        function show() {
            del.toggle(num > n)
        }
        show();
        $(".addbutton", el).on("click", function() {
            ++num
            show()
        });
        del.on("click", function() {
            num--;
            show()
        })
    })
});

Смотрю код немного изменился. Я его заменил. Теперь прибавляет по одному ИНПУТУ, как надо. Но вот кнопка УДАЛИТЬ не появляется.

laimas 02.10.2017 15:57

Цитата:

Сообщение от the_little
Моих знаний не достаточно, чтобы такой сложный скрипт править.

А что сложного то, убрать в коде

ustav-docs1
ustav-docs<?=$n?>

заменив на []. Но не понятен смысл клонирования/добавления как таковое да еще четырежды, так как поля определены как multiple="multiple". Одним полем можно уже выбрать сколь угодно, зачем же иметь таких полей множество? Вам уже надо беспокоится о том, чтобы выбор пользователя не выходил за рамки макс. разрешенного размера POST данных с учетом макс. разрешенного для загрузки размера файла. Плюс новые версии РНР имеют ограничения и на макс. разрешенное количество файлов для загрузки, которое по умолчанию равно 20.

Цитата:

Сообщение от the_little
Если он увидит что где-то не тот файл загружен - то там появляется корзинка, для очистки содержимого конкретного ИНПУТА.

Вот это хорошо, но тогда и не должно быть вопросов по кнопке "Убрать" в контексте, что она не то поле удалит. По идее она должны убирать только добавленное пустое поле, то есть быть доступной только при наличии такого поля.

рони 02.10.2017 16:11

Цитата:

Сообщение от the_little
Но вот кнопка УДАЛИТЬ не появляется.

смотрите что не так, у вас -- значение num, n? ошибки в консоли

the_little 02.10.2017 16:17

Цитата:

Сообщение от рони (Сообщение 466288)
смотрите что не так, у вас -- значение num, n? ошибки в консоли

Ошибок в консоли нет по этому поводу.
Вне зависимости от количества полей кнопка не появляется.
В html присутствует.

рони 02.10.2017 16:51

the_little,
значит у вас иной html

рони 02.10.2017 16:57

the_little,
сократил, до миниммума
смотрите что в консоли
$(function() {
    $(".step2-blocks").each(function(indx, el) {
        var del = $(".delbutton", el);  console.log($(".add", el).length);
        function show() {
            del.toggle($(".add", el).length > 1)
        }
        show();
        $(".addbutton", el).on("click", show);
        del.on("click", show)
    })
});

the_little 02.10.2017 17:12

Цитата:

Сообщение от рони (Сообщение 466296)
the_little,
сократил, до миниммума
смотрите что в консоли
$(function() {
    $(".step2-blocks").each(function(indx, el) {
        var del = $(".delbutton", el);  console.log($(".add", el).length);
        function show() {
            del.toggle($(".add", el).length > 1)
        }
        show();
        $(".addbutton", el).on("click", show);
        del.on("click", show)
    })
});

Огромное спасибо!!! Все работает сейчас.


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