Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Из трех калькулятор работает только последний, помогите разобраться (https://javascript.ru/forum/misc/76641-iz-trekh-kalkulyator-rabotaet-tolko-poslednijj-pomogite-razobratsya.html)

ligt222 29.01.2019 10:41

Из трех калькулятор работает только последний, помогите разобраться
 
Вложений: 1
Есть 3 калькулятора на одной странице, данные для калькулятора подтягиваю из БД а какие то вводятся. Нужно что бы работали калькуляторы все, а не только последний, по отдельности каждый работает, на разных страницах тоже работает, если коментить калькуляторы с последнего, то предыдущий будет работать (Коменчу 3 работает 2, коменчу 2 и 3 работает 1) id для каждого калькулятора не повторяются. Вот файл. P.S Они обязательно должны быть на одной странице. Может можно их как то изолировать друг от друга?

laimas 29.01.2019 12:19

А без РНР кода взять то что на странице нельзя? Ну никто же не будет запускать РНР, чтобы заполнить страницу данными. И вот это const plans = JSON.parse('<?php echo json_encode(get_plans(), true); ?>'); вообще не нужно, json_encode() и поместит строку для plans, которая и будет являться объектом в JS.

ligt222 29.01.2019 12:27

Она как бы в массив строку преобразовывает

laimas 29.01.2019 12:54

Цитата:

Сообщение от ligt222
Она как бы в массив строку преобразовывает

Это если бы асинхронным запросом клиент получил строку, вот тогда нужно было бы из нее получить объект. А вашем случае json_encode() вернет строку (вставит ее в js-код на странице), которая как разу будет литералом объекта или массива, в зависимости от того какой массив кодирует json_encode.

ligt222 29.01.2019 13:54

А если попробую сделать так что бы передавался id от блоков в которых находятся калькуляторы, и вынесу script общий для всех, а внутри блоков все будет по классам
$('.js-amount').on('change keyup', function () {
let block_id = $(this).parents('.blockcalc').attr('id');

calc($(this).val(), block_id);

Ну вот так примерно? Получится? Мне просто JSON.parse Нельзя убирать

laimas 29.01.2019 14:17

Цитата:

Сообщение от ligt222
Мне просто JSON.parse Нельзя убирать

Это почему? Понимаете, то что там написано, пустое занятие не имеющее никакой пользы. Вот массив в РНР:

$a = [
    'a' => 1,
    'b' => 2
];


json_encode из этого массива сформирует строку - "{"a":1,"b":2}". Если ее вставить при выводе в тег
<script>
var j = <?=json_encode($a);?>
</script>, то результатом на клиенте будет вот такое:

<script>
var j = {"a":1,"b":2}; //уже готовый объект, его литеральная запись 
</script>


Вы же берете строку от json_encode обрамляете ее в кавычки, затем уже на клиенте она будет преобразована в объект. Вопрос - нахрена нужна эта лишняя арифметика?

laimas 29.01.2019 14:27

В общем пустое как на сервере так и на клиенте не к чему. Вы лучше либо покажите результирующий html код и js, либо ссылку на страницу, а ковыряться в смеси кода, большую часть которого выполнить нельзя, мало кто станет.


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