Javascript.RU

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

Зачем номер и для чего?
Ответить с цитированием
  #72 (permalink)  
Старый 25.07.2017, 09:56
Аспирант
Отправить личное сообщение для ФедорН Посмотреть профиль Найти все сообщения от ФедорН
 
Регистрация: 19.06.2017
Сообщений: 40

Сообщение от laimas Посмотреть сообщение
Зачем номер и для чего?
Напомню:
У меня получается так, что на странице клиент может добавить в калькулятор несколько позиций, далее открывает форму заказа и эти позиции, каждая в виде отдельной строки, добавляются в поле textarea.
Высота textarea ограничена, прокрутка не сильно удобна, при просмотре позиций (особенно если несколько одинаковых) легко сбиться. Я смотрел, как сделать поле textarea "резиновым" (скрипт впечатляющий). Также "примерял" div contenteditable, не впечатлил (и оформить корректно его мне не удалось). Поэтому я решил остановиться на том, чтобы просто пронумеровать строки, так по цифрам сбиться будет невозможно.

Последний раз редактировалось ФедорН, 25.07.2017 в 10:02.
Ответить с цитированием
  #73 (permalink)  
Старый 25.07.2017, 10:11
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от ФедорН
Поэтому я решил остановиться на том, чтобы просто пронумеровать строки, так по цифрам сбиться будет невозможно.
Вы разрешаете пользователю добавить но не заполняя отправить? Думаю нет, а следовательно все что выбрано будет по-порядку. Чем может помочь нумерация?

Если уж так охота пронумеровать в итоге, то есть в textarea, то методы $.map, $each и прочие, первым аргументом в функцию передают индекс элемента. Добавляйте к нему 1, получите нумерацию от 1 до ...
Ответить с цитированием
  #74 (permalink)  
Старый 25.07.2017, 10:39
Аспирант
Отправить личное сообщение для ФедорН Посмотреть профиль Найти все сообщения от ФедорН
 
Регистрация: 19.06.2017
Сообщений: 40

Сообщение от laimas Посмотреть сообщение
Если уж так охота пронумеровать в итоге, то есть в textarea, то методы $.map, $each и прочие, первым аргументом в функцию передают индекс элемента. Добавляйте к нему 1, получите нумерацию от 1 до ...
Спасибо! Оказалось, так просто.
Ответить с цитированием
  #75 (permalink)  
Старый 25.07.2017, 10:53
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Более полезным было бы удалять из набора не выбранные опции, а так как фактически это задается выбором в списке, то те, в которых нет выбора в нем. Делать это нужно по вызову формы

$('div.roword').filter(function() {
    return !$(this).find('select').val()
}).remove();


А нумерация чисто для красоты, вряд ли пользователь будет запоминать под каким номером он чего-то набрал, да и так ли это важно.
Ответить с цитированием
  #76 (permalink)  
Старый 25.07.2017, 21:29
Аспирант
Отправить личное сообщение для ФедорН Посмотреть профиль Найти все сообщения от ФедорН
 
Регистрация: 19.06.2017
Сообщений: 40

Сообщение от laimas Посмотреть сообщение
Более полезным было бы удалять из набора не выбранные опции, а так как фактически это задается выбором в списке, то те, в которых нет выбора в нем. Делать это нужно по вызову формы

$('div.roword').filter(function() {
    return !$(this).find('select').val()
}).remove();
Благодарю. Согласен, полезная функция.
Я сначала ее в калькулятор запихал, естественно, первая строка при загрузке сразу удалялась потом уже в форму заказа добавил, все ок. но как понял, теоретически, если реализовать как-то через .onclick, то возможно было и в калькулятор добавить? (это сугубо для понимания. код не нужен).

Сообщение от laimas Посмотреть сообщение
А нумерация чисто для красоты, вряд ли пользователь будет запоминать под каким номером он чего-то набрал, да и так ли это важно.
Нет, нет, запоминать ничего не нужно.

Грубо на примере:


Заказали вы 10 Полей с исходным текстом, по высоте texarea весь список не отображается (максимум видно 2 позиции за раз), нужно пролистывать стрелками прокрутки. Пересчитать таким образом, что их 10, будет довольно проблематично, учитывая, что все они одинаковы.
А так они пронумерованы, вы сразу видите:
1. Поле с исходным текстом
...
10. Поле с исходным текстом

Это и всего лишь имелось в виду.

Последний раз редактировалось ФедорН, 25.07.2017 в 21:33.
Ответить с цитированием
  #77 (permalink)  
Старый 25.07.2017, 22:14
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от ФедорН
Я сначала ее в калькулятор запихал, естественно, первая строка при загрузке сразу удалялась
Все верно, она и должна удаляться так как это пример без учета того, что элементы первого набора удалять нельзя. Если можно отменить отправление формы и вернуться к набору, то удалив первый набор полей, добавить новые клонированием уже нельзя. Удалять незаполненные, но кроме первой:

$('div.roword').not(':first').filter(function() {
           return !$(this).find('select').val()
        })
        .remove()
        .end()


Это коллекция, в которой все после первого набора заполнены. Заполнено ли все в первой неизвестно, требуется проверка.
Ответить с цитированием
  #78 (permalink)  
Старый 26.07.2017, 20:26
Аспирант
Отправить личное сообщение для ФедорН Посмотреть профиль Найти все сообщения от ФедорН
 
Регистрация: 19.06.2017
Сообщений: 40

Сообщение от laimas Посмотреть сообщение
Все верно, она и должна удаляться так как это пример без учета того, что элементы первого набора удалять нельзя. Если можно отменить отправление формы и вернуться к набору, то удалив первый набор полей, добавить новые клонированием уже нельзя. Удалять незаполненные, но кроме первой:
Понял. Поправил. Все ок.
Ответить с цитированием
  #79 (permalink)  
Старый 26.07.2017, 20:37
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от ФедорН
Все ок.
Как душе угодно, но учтите, первый при этом требует проверки. А можно ведь и не клонировать, а удалять все, при этом по умолчанию нет никаких полей.

Поле можно добавлять используя ранее заготовленный шаблон, который описан в переменной или хранится как данные в атрибуте кнопки Добавить:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
<style>
.myPrice {
    border: none;
}
</style>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script>
$(function() {
    
    $('button').click(function() {
       $($(this).data('ins')).appendTo($('#form'))
                             .find('.myPrice').focus(function() {
                                    this.blur()
                             })
                             .end()
                             .find('a').click(function() {
                                    $(this).closest('.roword').remove()
                             })
    });
    
    //обработка изменения слайдера и выбора в списке
    $('#form').on('input change', 'select,input', function() {
        if(this.type == 'range') $(this).next().text(this.value)  //отобразить значение слайдера    
        //рассчет
        var o = $(this).closest('.roword').find('select,input'),
            v = o.eq(0).val(),
            w = o.eq(1).val(),
            h = o.eq(2).val(),
            r = o.last().val('');
            if(v) { 
                v = v * w * h;
                if(w * h <= 2399)  v *= 1.1
                else if(w * h >= 2400 && w * h <= 3999) v *= 1.055
                else if(w * h >= 4000 && w * h <= 5399) v *= 1.03;
                else if(w * h >= 5400 && w * h <= 6399) v *= 1.0135;
                r.val(v.toFixed())
            }
    });
    
    $('a').click(function() {
        $('div.roword').filter(function() {
            return !$(this).find('select').val()
        }).remove();
                
        var res = $.map($('div.roword'), function(e, i) {
                            return i+1 + '. ' + $.map($(e).find('select,input'), function(e) {
                                return e.value
                        }).join(', ');
                  }).join('\n');
        
        if(res) {
            $('textarea').val(res);
            $('button').prop('disabled', 0);
        }
    })

});
</script> 
</head>
<body>

<div id="form"></div>

<div class="clearfix"></div>
<button data-ins='<div class="roword"><div class="col-md-3 col-sm-6 col-xs-12 form-col-1"><select>
<option value="">Выберите цвет</option><option value="1.2">Зеленый</option><option value="1.6">Синий</option><option value="1.8">Красный</option></select>
</div><div class="col-md-3 col-sm-6 col-xs-12 form-col-2"><input type="range" min="40" max="300" value="40"><span>40</span></div>
<div class="col-md-3 col-sm-6 col-xs-12 form-col-3"><input type="range" min="40" max="200" value="40"><span>40</span></div>
<div class="col-md-3 col-sm-6 col-xs-12 form-col-4"><input class="myPrice" type="text" readonly> <a>Удалить</a></div></div>'>Добавить</button>

<div><textarea></textarea></div>
<a>Send</a>
</body>
</html>

Последний раз редактировалось laimas, 26.07.2017 в 21:27.
Ответить с цитированием
  #80 (permalink)  
Старый 03.08.2017, 09:32
Аспирант
Отправить личное сообщение для ФедорН Посмотреть профиль Найти все сообщения от ФедорН
 
Регистрация: 19.06.2017
Сообщений: 40

laimas, прошу прощения, только сейчас увидел ваше последнее сообщение. Вы имели в виду, что первая строка требует проверки перед тем, как добавить следующую или же перед тем, как перейти к форме заказа?
Но что-то в коде не так: перестали работать калькулятор и кнопка "добавить", с первой же строки калькулятора появилась не кликабельная "удалить".
В html были несколько ошибок (видимо, образовались в процессе копирования): съехал <button data-ins=' и <div class="clearfix"></div>, и как понимаю, это лишний кусок: <div><textarea></textarea></div>
<a>Send</a>
Это я поправил. Но скрипт не могу.

Последний раз редактировалось ФедорН, 03.08.2017 в 09:51.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с выпадающим списком osetr Общие вопросы Javascript 1 11.11.2014 20:18
Работа с выпадающим списком (SELECT) Bogus Общие вопросы Javascript 14 11.03.2013 08:39
jQuery. Работа с динамически создаваемым списком. nule jQuery 6 27.12.2011 16:56
jQuery проблемы с раскрывающимся списком teclis jQuery 3 24.08.2010 12:25