Суммировать индекси двух массива
Здравствуйте у меня такой вопрос, как можно умножить индекси двух массивах ?.
<div class="calc1"> <span>1dr</span> <span>2dr</span> <span>3dr</span> <span></span> <input type="text"></input> <input type="text"></input> <input type="text"></input> <input type="text" disabled></input> </div> <div class="block1"></div> <button class="btn">button</button> 1- получаем всё input у которых нет disabled , 2- получаем всё span которые не пустые и делаем parseint 3- умножим индекс первого массива с индексом второго массива. 4- запишем результат в .block1 Заранее благодарю за ответ. var inputs = $(".calc input").get(); var spans = parseint($(".calc span").text().get()); |
Цитата:
var p = $(".calc1").children(), input = p.filter('input:not(:disabled)'), //1 span = p.filter('span:not(:empty)'); //2 get() - это уже DOM набор 3) - что значит умножить индекс? |
В input выведется цифры , в span цифры и строка,
span parseint вычесляем цифры. var spans = Array(цифры из span); var inputs = Array(введение цыфры); spans [ x] * inputs [ x] ; |
Цитата:
|
По моему здесь логика должен быть таким.
Праверяем if input != ""; патамучта кагда оно пуста то выводить nan. Патом while или foreach вычесляем индекси из двух массивах и умножим друг другу 0*0, 1*1, 2*2, 3*3 ... |
Функция parseInt() разве не вычесляет цыфры из строк?
|
Цитата:
var p = $(".calc1").children(), span = p.filter(function() { return this.textContent.match(/^\d$/) }), //только те, в которых числа input = p.filter(function() { return this.type=='text' && !this.disabled && this.value.match(/^\d$/) }); //только если не пустое значение и число Если как ранее упоминалось, первые, то можно сразу добавить .first() в каждую цепочку. Если же все, то ведь не обязательно, что число элементов двух массивов будет равно, да и вообще будет ли что-то возвращено. Если же возвращено, то нужно брать меньший массив, а из большего срез равный меньшему. Хотя бог его знает, чего вам надо. |
Цитата:
|
Я извиняюсь, ошибка было моей. Я должен был сказать вам что это калькулятор и в span написание цену за единицу + руб. а в input каличество , результат будет записаться в div class blok1
|
И это может быть набором таких значений и число обеих наборов (не пустых) всегда равно?
PS. Если калькулятор, то видимо нужно брать не просто непустые и разрешенные, а пары, соотносящиеся друг к другу элементы? |
Да вы правы
|
Да вы правы, и ещё я и сверстаю flex ом и span и в отдельном диве, воабшем получается сплашная каша.
|
Если так, то выбирать span непустые и разрешенные поля, это не лучшее что можно придумать. Такое возможно, если при любом раскладе элементы одного набора будут гарантированно иметь "вторую половину" в другом наборе и под теми же индексами.
Если span содержит цены, а поля ввода, это количество, то цену выгоднее содержать в самом поле ввода в атрибуте data-... (чисто цена, без всяких руб. и т.п.). По событию ввода в поле нужно удалять не цифровые символы из него и производить расчет. А для этого достаточно пройти циклом (здесь можно использовать единственный фильтр - разрешенные), умножая их значения на значения из атрибута data-..., и суммируя. А span в расчетах вообще не используется. |
Да видно что у вас большая опыт, это хорошая идея, сейчас пабробаю сам сделать, если будут вопросы то обращаюсь к вам. Царские Спасибо вам.
|
Здравствуйте laimas, я пробовал кое-что получилось, но не все к сожалению. две значение друг к другу умножается, но вот только не знаю как патом суммировать все это чтобы получил общую сумму.
$('.calc1_btn').click(function(){ $ ('#calc .calc1_input input').not("[disabled]").each (function (index) { let input = ($ (this).val ()); let data =($('#calc .calc1_input input').not("[disabled]").data("price")); let inputs = input * data; console.log(input); console.log(data); console.log(inputs); $('.calc_result p').html(inputs); });}); <div class="calc1_input calc_one"> <span>Քանակ</span> <input type="text" data-price="5000"> <input type="text" data-price="5000"> <input type="text" data-price="5000"> </div> <button class="calc1_btn">сумм</button> <div class="calc_result"> <p></p></div> |
Hovik,
Пожалуйста, отформатируйте свой код! Для этого его можно заключить в специальные теги: js/css/html и т.п., например: [html run] ... минимальный код страницы с вашей проблемой [/html] О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting. |
Сделал
|
Hovik,
$('.calc1_btn').click(function(){ let inputs = 0; $ ('#calc .calc1_input input').not("[disabled]").each (function (index) { let input = ($ (this).val ()); let data =($('#calc .calc1_input input').not("[disabled]").data("price")); inputs += input * data; console.log(input); console.log(data); console.log(inputs); }); $('.calc_result p').html(inputs); }); |
Спасибо за ответ рони, но скрипт работает не правильно, оно выбирает для всех значение первого data, а они могут быть разними
|
и еще хорошо было если мы могли объединить эти две функции я пробовал разные варианты, но не получилось, проблема по моему в действие одна сработает при клике, а другая при смене option.
var AMD = 1; var RUB = 8; var USD = 480; $('#valute').change(function(){ if($('#valute option:selected').val() == 'AMD'){ var valute = AMD; } else if($('#valute option:selected').val() == 'USD'){ var valute = USD;} else{ var valute = RUB;} console.log(valute);}); $('.calc1_btn1').click(function(){ let inputs = 0; $ ('#calc .calc1_input input').not("[disabled]").each (function (index) { let input = ($ (this).val ()); let data =($('#calc .calc1_input input').not("[disabled]").data("price")); inputs += input * data; }); $('#calc .calc_result p').html("Ընդհանուր Արժեքը: " + inputs + " դրամ"); }); |
Цитата:
<input type="text" data-price="[5000,6000,7000]"> цен за единицу товара, .data("price") вернет их массив, а опции списка выбора валюты значениями должны указывать на индекс в этом массиве. |
Цитата:
let data = $(this).data("price"); |
Логика хорошая но теперь вопрос другой, оставить if + each или foreach использовать и вообще не понимаю как это сделать если можно то дайте ссылку на пример.
|
Цитата:
|
Вапрос к вам laimas,, ответ рони, понял, он просто написал код хата я ещё не праверил но там нужно тупа менять строк кода.
А вапрос такой. Логика вашего структуры понятно мне, по поводу работы с валютами, но каким образом сделать это, я понимаю может это для вас лехкая задача, но для меня очень трудный, голова прямо разваливается, пращу если вазможна то напишите код целиком. |
|
Hovik,
<input type="text" data-price="[5000,6000,7000]"> <select id='valute'> <option value="0">AMD</option> $(function() { $('.calc1_btn').click(function(){ let inputs = 0, index = $('#valute').val(); $ ('#calc .calc1_input input').not("[disabled]").each (function (index) { let input = +$(this).val(); let data = $(this).data('price'); inputs += input * data[index]; }); $('.calc_result p').html(inputs); }); $('#valute').change(function() { $('.calc1_btn').trigger('click') }) }); |
Ссылка на сайт не получается, смотрите сами.
http://heraxosi-aqsesuar.ru/calculation.html#valute inputs == nan |
Цитата:
Способов хранения данных касающихся цен с учетом валют может быть несколько. Допустим можно хранить в базе цену товара сразу во всех валютах в раздельных полях. Минус такого хранения в том, что курсы валют непостоянны, а значит придется раз в сутки обновлять цены в базе. Другой способ, это цена товара в базе представлена в одной базовой валюте, которая является валютой по умолчанию. Все дальнейшие операции с этой ценой с учетом валют производятся на лету. А планировщик только получает и сохраняет в базе курсы валют с которыми работает сайт. Предположим что у вас так и хранятся товары/услуги или чего-то там. Теперь можно думать какие задачи будут возложены на клиента, что соответственно и определит html структуру представления товаров/услуг на странице, и код ее обслуживающий. Здесь два возможных варианта: 1) Клиентский код обеспечивает только выборку и сохранение в куках выбранной валюты либо передает выбранную валюты как параметр запроса в URL. Расчеты какие либо он производит согласно ценам по выбранной валюте, как это ранее и говорилось, в атрибутах data-..., в которые их помещает сервер, при выдаче страницы клиенту, рассчитывая цены в валютах отличных от базовой согласно курса. Кроме этого сервер помещает во все элементы на странице, которые отображают цену товара/услуги, рассчитанные цены в атрибут data-... То есть при смене валюты в списке, все цены на странице также должны быть выбраны из этих атрибутов и отображены у товара/услуги js-скриптом. 2) Для клиента сервер ничего не считает при запросе страниц, он отдает страницу всегда с ценами в базовой валюте, а в опции списка выбора валют помещает в data-... атрибуты отношения курсов валют. Для базовой валюты оно равно 1, для остальных соответственно курсу, а также помещает в data-... атрибуты и символы валют. Отдавая страницу клиенту, сервер также проверяет установку кук и если нет установленной валюты, устанавливает в куках базовую валюту. При получении страницы js-код проверяет какая валюта хранится в куках, отмечает в списке опцию соответствующую этой валюте, получает все цены на странице, производит их конвертацию к установленной валюте и отображает их на странице. При расчете в калькуляторе конвертирует суммы выбранных товаров/услуг и итоговую сумму. При смене валюты в списке производятся такие же операции плюс сохранение выбранной валюты в куках. Почему куки? Если на сайте нет и не предусматривается таких операций как например выбор по фильтру по цене, то в общем-то не обязательно куки, можно хранить выбранную валюту и в локальном хранилище. Иначе сервер должен знать в какой валюте делается запрос фильтра, чтобы привести цены в запросе к базовой валюте для подстановки их в SQL запрос. А удобнее всего для этого куки - сервер имея доступ к ним определит текущую валюту. В принципе это все, в общем плане. |
Спасибо вам обоим, вы оба профессиональной праграмисти и я рад что вы памагаите новичкам. К сожалению я ещё не хорошо знаю php но учусь, так что есть надежда что до окончания года буду называться праграмистом, ну а пока решил сделать эту задачу без выбор валюты а потом увидим. Большое спасибо вам обоим.
|
Часовой пояс GMT +3, время: 14:17. |