Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 02.10.2017, 12:27
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от рони
чтоб не удалить последний, надо полагать
А что значит последний?
Во-первых это name="ustav-docs1", name="ustav-docs2" уже плохо для сервера, ибо такие имена обрабатывать, это костыль. А удалять удобнее "любой из", а не только последний добавленный.
Ответить с цитированием
  #12 (permalink)  
Старый 02.10.2017, 12:40
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

laimas,
согласен.
Ответить с цитированием
  #13 (permalink)  
Старый 02.10.2017, 13:40
Профессор
Отправить личное сообщение для the_little Посмотреть профиль Найти все сообщения от the_little
 
Регистрация: 25.09.2017
Сообщений: 186

Сообщение от laimas Посмотреть сообщение
А что значит последний?
Во-первых это name="ustav-docs1", name="ustav-docs2" уже плохо для сервера, ибо такие имена обрабатывать, это костыль. А удалять удобнее "любой из", а не только последний добавленный.
Есть дизайн. В дизайне предусмотрен определенный функционал.
ИНПУТ ФАЙЛ //при добавлении файла появляется корзина для очистки//
[добавить поле][удалить поле]

Если поля добавлены, то выглядит это так
ИНПУТ ФАЙЛ //при добавлении файла появляется корзина для очистки//
ИНПУТ ФАЙЛ //при добавлении файла появляется корзина для очистки//
ИНПУТ ФАЙЛ //при добавлении файла появляется корзина для очистки//
ИНПУТ ФАЙЛ //при добавлении файла появляется корзина для очистки//
[добавить поле][удалить поле]

Соответсвенно здесь предусмотрено именно удаление последнего поля.
Ответить с цитированием
  #14 (permalink)  
Старый 02.10.2017, 13:41
Профессор
Отправить личное сообщение для the_little Посмотреть профиль Найти все сообщения от the_little
 
Регистрация: 25.09.2017
Сообщений: 186

Сообщение от рони Посмотреть сообщение
чтоб не удалить последний, надо полагать
Кстати защита какая-то от удаления последнего есть. КОгда инпут 1, кнопка удалить не работает
Ответить с цитированием
  #15 (permalink)  
Старый 02.10.2017, 13:50
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от the_little
Есть дизайн. В дизайне предусмотрен определенный функционал.
А какое отношение к дизайну имеет именование полей формы?
У вас список файлов и для них вам так нужна строгая последовательность от 1 до N?

Какая разница как они будут загружены в последовательности если это всего лишь список документов. А значит ваша нумерация всего лишь усложнение кода на клиенте и на сервере, более она ничего не дает.

Список, это name="file[]", и на клиенте не требуется счетчика, а просто клонирование элемента, с очисткой его значения. И север получить под ключом file массив файлов.

А пользователю же в случае одной кнопки удаления, удаляющей последнее, выбранный ошибочно файл, который он заметит только после последующего выбора, удалить не получится. Это по вашему удобно? Собственно дизайн не есть Закон, с адекватным заказчиком можно всегда договориться если он понимает, что заложенное страдает неудобством.
Ответить с цитированием
  #16 (permalink)  
Старый 02.10.2017, 13:50
Профессор
Отправить личное сообщение для the_little Посмотреть профиль Найти все сообщения от the_little
 
Регистрация: 25.09.2017
Сообщений: 186

Сообщение от рони Посмотреть сообщение
the_little,
id лучше убрать, достаточно классов
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  </style>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>

  <script>
$(function() {
    $(".step2-blocks").each(function(indx, el) {
        var add = $(".add", el),
            num = add.length,
            item = add.eq(0).clone(),
            del = $(".delbutton", el),
            n = 1;

        function show() {
            del.toggle(num > n)
        }
       show(); 
        $(".addbutton", el).on("click", function() {
            var block = item.clone().insertAfter($(".add:last", el));
            $(".inputfile", block).attr({
                "name": "ustav-docs" + ++num
            });
            show()
        });
        del.on("click", function() {
            $(".add:last", el).remove();
            num--;
            show()
        })
    })
});
  </script>
</head>

<body>
<div class="step2-blocks">
    <div class="input-file-name">Уставные документы</div>
    <div id="add_field_area">

            <div id="add1" class="add">
                <div class="input_file_hold">
                    <label class="input_file_label btn btn_upload_file">
                        <input type="file" name="ustav-docs1" id="ustav-docs" class="inputfile outtaHere" onblur="writeFieldsVlues();" multiple="multiple"/>
                        <div class="input_file_add"><img src="./images/screpka_red.png" alt="">Выбрать файл</div>
                    </label>
                </div>
            </div>

            <div id="add2" class="add">
                <div class="input_file_hold">
                    <label class="input_file_label btn btn_upload_file">
                        <input type="file" name="ustav-docs2" id="ustav-docs" class="inputfile outtaHere" onblur="writeFieldsVlues();" multiple="multiple"/>
                        <div class="input_file_add"><img src="./images/screpka_red.png" alt="">Выбрать файл</div>
                    </label>
                </div>
            </div>
<!-- пробовал сюда вставить <span class="count"></span>, посчитал, вывел 1, но если нажать на кнопку добавить поле, то значение не меняется. Так и остается 1-->
    </div>
    <div class="addfield">
        <div onclick="addField();" class="addbutton"><img src="./images/plus_ico.png" alt="">Добавить еще</div>
        <input type="hidden" name="values" id="values"  value="<?=$array?>"/>
        <div onclick="deleteLastField();" class="delbutton"><img src="./images/minus_ico.png" alt="">Убрать</div>

        <span class="count"></span>
    </div>
</div>

</body>
</html>
Работает. Но при нажатии кнопки ДОБАВИТЬ ПОЛЕ - создается 2 поля сразу.
Ответить с цитированием
  #17 (permalink)  
Старый 02.10.2017, 13:51
Профессор
Отправить личное сообщение для the_little Посмотреть профиль Найти все сообщения от the_little
 
Регистрация: 25.09.2017
Сообщений: 186

Можно из этого скрипта убрать функционал кнопки ДОБАВИТЬ ПОЛЕ.
Он прописан в другом скрипте, поэтому скорее всего 2 и добавляются
Ответить с цитированием
  #18 (permalink)  
Старый 02.10.2017, 13:54
Профессор
Отправить личное сообщение для the_little Посмотреть профиль Найти все сообщения от the_little
 
Регистрация: 25.09.2017
Сообщений: 186

Там такой скрипт используется
<script>
$('.input_file_hold').each(function () {
    var hold = $(this);
    var file = hold.find('.inputfile');
    var text = hold.find('.input_file_add');

    file.on("change", function (inpfil) {
        var files = file[0].files;

        $(this).parent().parent().addClass('file_selected');

        if (files.length > 1) {
            text.text("Файлов добавлено: " + files.length);
            text.prepend('<img src="./images/screpka_green.png" alt="">');
            text.parent().parent().append('<div class="button_close"><img src="./images/del_ico.png" alt=""></div>');
        
            var close = text.parent().parent().find('.button_close');

            close.on("click", function (inpfilclose) {
                    file.val('');
                    text.text('Выбрать файл');
                    text.prepend('<img src="./images/screpka_red.png" alt="">');
                    $(this).parent().removeClass('file_selected');
                    $(this).remove('.button_close');
            });

        }
        else {
            var filename = inpfil.target.value.split("\\").pop();
            text.text(filename);
            text.prepend('<img src="./images/screpka_green.png" alt="">');

            text.parent().parent().append('<div class="button_close"><img src="./images/del_ico.png" alt=""></div>');
        
            var close = text.parent().parent().find('.button_close');

            close.on("click", function (inpfilclose) {
                file.val('');
                text.text('Выбрать файл');
                text.prepend('<img src="./images/screpka_red.png" alt="">');
                $(this).parent().removeClass('file_selected');
                $(this).remove('.button_close');
            });

        }
    });

});

</script>


И еще такой
<script type="text/javascript">

function addField () {
    var telnum = parseInt($('#add_field_area').find('div.add:last').attr('id').slice(3))+1;
    $('div#add_field_area').append('<div id="add'+telnum+'" class="add"><div class="input_file_hold"><label class="input_file_label btn btn_upload_file"><input type="file" name="ustav-docs'+telnum+'" id="ustav-docs" class="inputfile outtaHere" onblur="writeFieldsVlues();" multiple="multiple"/><div class="input_file_add"><img src="./images/screpka_red.png" alt="">Выбрать файл</div></label></div></div>');

    var file = $('#add'+telnum).find('.inputfile');
        var text = $('#add'+telnum).find('.input_file_add');

        file.on("change", function (inpfil) {
            var files = file[0].files;

            $(this).parent().parent().addClass('file_selected');

            if (files.length > 1) {
                text.text("Файлов добавлено: " + files.length);

                text.prepend('<img src="./images/screpka_green.png" alt="">');
                text.parent().parent().append('<div class="button_close"><img src="./images/del_ico.png" alt=""></div>');
        
                var close = text.parent().parent().find('.button_close');

                close.on("click", function (inpfilclose) {
                    file.val('');
                    text.text('Выбрать файл');
                    text.prepend('<img src="./images/screpka_red.png" alt="">');
                    $(this).parent().removeClass('file_selected');
                    $(this).remove('.button_close');
                });



            } else {
                var filename = inpfil.target.value.split("\\").pop();
                text.text(filename);
                text.prepend('<img src="./images/screpka_green.png" alt="">');
                text.parent().parent().append('<div class="button_close"><img src="./images/del_ico.png" alt=""></div>');
        
                var close = text.parent().parent().find('.button_close');

                close.on("click", function (inpfilclose) {
                    file.val('');
                    text.text('Выбрать файл');
                    text.prepend('<img src="./images/screpka_red.png" alt="">');
                    $(this).parent().removeClass('file_selected');
                    $(this).remove('.button_close');
                });

            }
        });

}

function deleteField (id) {
    $('div#add'+id).remove();
    writeFieldsVlues();
}

function deleteLastField () {
        var id = parseInt($('#add_field_area').find('div.add:last').attr('id').slice(3));
        if(id > 1){
        $('div#add'+id).remove();
    }
    writeFieldsVlues();
}

function writeFieldsVlues () {
    var str = [];
    var tel = '';
    for(var i = 0; i<$("input#ustav-docs").length; i++) {
        tel = $($("input#ustav-docs")[i]).val();
        if (tel !== '') {
            str.push($($("input#ustav-docs")[i]).val());
        }
    }
    $("input#values").val(str.join("|"));
}
</script>
Ответить с цитированием
  #19 (permalink)  
Старый 02.10.2017, 13:57
Профессор
Отправить личное сообщение для the_little Посмотреть профиль Найти все сообщения от the_little
 
Регистрация: 25.09.2017
Сообщений: 186

Вообще конечно жесть получается. У меня 4 инпута разных.
ustav-docs
buh-docs
nalog-docs
garant-docs
Получается все эти скрипты нужно 4 раза повторить))
Ответить с цитированием
  #20 (permalink)  
Старый 02.10.2017, 15:09
Профессор
Отправить личное сообщение для the_little Посмотреть профиль Найти все сообщения от the_little
 
Регистрация: 25.09.2017
Сообщений: 186

Сообщение от laimas Посмотреть сообщение
А какое отношение к дизайну имеет именование полей формы?
У вас список файлов и для них вам так нужна строгая последовательность от 1 до N?
Так было написано в скрипте, который брался за основу. Моих знаний не достаточно, чтобы такой сложный скрипт править.

Цитата:
Какая разница как они будут загружены в последовательности если это всего лишь список документов. А значит ваша нумерация всего лишь усложнение кода на клиенте и на сервере, более она ничего не дает.
Возможно нумерацию можно убрать, не навредив работе скрипта. Попробую.

Цитата:
А пользователю же в случае одной кнопки удаления, удаляющей последнее, выбранный ошибочно файл, который он заметит только после последующего выбора, удалить не получится. Это по вашему удобно? Собственно дизайн не есть Закон, с адекватным заказчиком можно всегда договориться если он понимает, что заложенное страдает неудобством.
Если он увидит что где-то не тот файл загружен - то там появляется корзинка, для очистки содержимого конкретного ИНПУТА.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подсчет количества кликов мыши на объект в jquery Евгений_86 Events/DOM/Window 27 03.02.2019 03:46
Изменение css стилей в зависимости от количества элементов spaiker2009 Элементы интерфейса 1 30.09.2015 23:23
Подсчет кол-ва дочерних элементов и передача им параметра KoRNeT46RuS Элементы интерфейса 6 03.04.2015 08:30
Удаление определённого количества элементов в родительском блоке 1lider Events/DOM/Window 13 03.12.2013 17:26
JSON и подсчет количества элементов KupueIIIKo Общие вопросы Javascript 7 10.01.2013 16:14