Несколько счетчиков с разными значениями
Есть несколько вот таких блоков
<div class="col-md-12"> <div class="card" id="count_one"> <input type="hidden" id="speed" value="0.0000397938144330" /> <div class="card-body"> <div class="media align-items-center"> <input type="hidden" id="float" value="10.000067981099106"> <div class="media-body"> <span id="Count">10.00009856</span> <span id="Price">0.50</span> <span id="Cash">5.00006288</span> </div> </div> </div> </div> </div> <div class="col-md-12"> <div class="card" id="count_two"> <input type="hidden" id="speed" value="0.0000000020431799" /> <div class="card-body"> <div class="media align-items-center"> <input type="hidden" id="float" value="100.00004564566"> <div class="media-body"> <span id="Count">100.00009856</span> <span id="Price">10.50</span> <span id="Cash">1050.0004567456</span> </div> </div> </div> </div> </div> <div class="col-md-12"> <div class="card" id="count_three"> <input type="hidden" id="speed" value="0.0000000159790278" /> <div class="card-body"> <div class="media align-items-center"> <input type="hidden" id="float" value="1.000456546546"> <div class="media-body"> <span id="Count">1.000345345</span> <span id="Price">0.70</span> <span id="Cash">0.700345345</span> </div> </div> </div> </div> </div> И так далее 10 блоков и более как заставить их работать все, работает только первый блок $(document).ready(function () { var renderPrice, renderCount, RenderSum,renderSpeed renderPrice = $('#Price'); renderSpeed = $('#speed').val(); renderCount = $('#Count'); test = $('#float'); RenderSum = $('#Cash'); setInterval(function () { test.val(parseFloat(renderSpeed / 600) + parseFloat(test.val())) renderCount.text(parseFloat(test.val()).toFixed(8)) RenderSum.text(parseFloat(parseFloat(renderCount.text()) * parseFloat(renderPrice.text())).toFixed(8)) } , 100) }); |
madam,
выкинуть все id из кода, заменить на class, и сделать цикл по блокам. |
Начнем с того, что id должен быть уникальным. Нельзя назначать одинаковый id разным элементам.
Можно использовать классы (фиктивно, только для того, что бы иметь возможность найти этот элемент) или атрибуты data- <div class="col-md-12"> <div class="card" id="count_one"> <input type="hidden" class="idspeed" value="0.0000397938144330" /> <div class="card-body"> <div class="media align-items-center"> <input type="hidden" class="idfloat" value="10.000067981099106"> <div class="media-body"> <span data-Count>10.00009856</span> <span data-Price>0.50</span> <span data-Cash>5.00006288</span> </div> </div> </div> </div> </div> <div class="col-md-12"> <div class="card" id="count_two"> <input type="hidden" class="idspeed" value="0.0000000020431799" /> <div class="card-body"> <div class="media align-items-center"> <input type="hidden" id="float" value="100.00004564566"> <div class="media-body"> <span data-Count>100.00009856</span> <span data-Price>10.50</span> <span data-Cash>1050.0004567456</span> </div> </div> </div> </div> </div> Ну и скрипт тогда как то так будет $(document).ready(function () { let cards = document.querySelectorAll('.card') setInterval(function () { cards.forEach (card => { const renderPrice = card.querySelector('[data-Price]'); const renderSpeed = card.querySelector('.idspeed').value; const renderCount = card.querySelector('[data-Count]'); const test = card.querySelector('[data-float]'); const RenderSum = card.querySelector('[data-Cash]'); test.vaue = parseFloat(renderSpeed / 600) + parseFloat(test.value) renderCount.textContent = parseFloat(test.value).toFixed(8) RenderSum.textContent = parseFloat(parseFloat(renderCount.textContent) * parseFloat(renderPrice.textContent)).toFixed(8) }) } , 100) }); |
card.querySelector('.idspeed').val(); - а в уме было другое? :)
|
Цитата:
Не всегда корректно пробираюсь в мешанине jquery и ванили. |
Uncaught TypeError: Cannot read property 'value' of null
const renderSpeed = card.querySelector('.idspeed').value; at NodeList.forEach (<anonymous>) |
id="float" заменить на class="idfloat", в строке 13 ошибка, должно быть test.value, а не test.vaue.
|
<div class="col-md-12"> <div class="card" id="count_one"> <input type="hidden" class="idspeed" value="0.0000397938144330" /> <div class="card-body"> <div class="media align-items-center"> <input type="hidden" class="idfloat" value="10.000067981099106"> <div class="media-body"> <span data-Count>10.00009856</span> <span data-Price>0.50</span> <span data-Cash>5.00006288</span> </div> </div> </div> </div> </div> <div class="col-md-12"> <div class="card" id="count_two"> <input type="hidden" class="idspeed" value="0.0000000020431799" /> <div class="card-body"> <div class="media align-items-center"> <input type="hidden" class="idfloat" value="100.00004564566"> <div class="media-body"> <span data-Count>100.00009856</span> <span data-Price>10.50</span> <span data-Cash>1050.0004567456</span> </div> </div> </div> </div> </div> $(document).ready(function () { let cards = document.querySelectorAll('.card') setInterval(function () { cards.forEach (card => { const renderSpeed = card.querySelector('.idspeed').value; const renderPrice = card.querySelector('[data-Price]'); const renderCount = card.querySelector('[data-Count]'); const test = card.querySelector('.idfloat'); const RenderSum = card.querySelector('[data-Cash]'); test.value = parseFloat(renderSpeed / 600) + parseFloat(test.value) renderCount.textContent = parseFloat(test.value).toFixed(8) RenderSum.textContent = parseFloat(parseFloat(renderCount.textContent) * parseFloat(renderPrice.textContent)).toFixed(8) }) } , 100) }); Все вроде работает правильно ,но куча ошибок Uncaught TypeError: Cannot read property 'value' of null at const renderSpeed = card.querySelector('.idspeed').value; at NodeList.forEach (<anonymous>) at cards.forEach (card => { const renderSpeed = card.querySelector('.idspeed').value; |
<html> <body> <div class="col-md-12"> <div class="card" id="count_one"> <input type="hidden" class="speed" value="0.0000397938144330" /> <div class="card-body"> <div class="media align-items-center"> <input type="hidden" class="accret" value="10.000067981099106"> <div class="media-body"> <span class="count">10.00009856</span> <span class="price">0.50</span> <span class="cashe">5.00006288</span> </div> </div> </div> </div> </div> <div class="col-md-12"> <div class="card" id="count_two"> <input type="hidden" class="speed" value="0.0000000020431799" /> <div class="card-body"> <div class="media align-items-center"> <input type="hidden" class="accret" value="100.00004564566"> <div class="media-body"> <span class="count">100.00009856</span> <span class="price">10.50</span> <span class="cashe">1050.0004567456</span> </div> </div> </div> </div> </div> <script> document.addEventListener('DOMContentLoaded', _=> { let cards = document.querySelectorAll('.card') setInterval( _=> { cards.forEach (card => { let speed = card.querySelector('.speed').value, accret = card.querySelector('.accret'), count = card.querySelector('.count'), price = card.querySelector('.price'); accret.value = count.textContent = (speed / 600 + parseFloat(accret.value)).toFixed(12) card.querySelector('.cashe').textContent = (count.textContent * price.textContent).toFixed(12) }) }, 100) }); </script> </body> </html> Переписано только лишь потому, чтобы во время "писания" увидеть ошибку. Убраны лишние parseFloat и accret.value = count.textContent = ... чтобы не писать дважды фактически одно и тоже. Округление до 12, чтобы видно что все Ок. |
Часовой пояс GMT +3, время: 11:57. |