Получение из поля цены товара в объект
Дорогие товарищи программисты, имеется форма написанная на JS. Подключил её к онлайн кассе яндекс, при передаче параметров, мне необходимо, чтобы цена была плавающей, т.е пользователь вводит и она автоматически добавляется к объекту. С фиксированной ценой оплата проходит. Очень нужна Ваша помощь, я в этом плане новичок, бьюсь уже несколько суток.. Вот ссылка на форму :
http://pay-makerich.plp7.ru/ Вот код формы : <form action="https://money.yandex.ru/eshop.xml" method="post"> <input name="shopId" value="533786" type="hidden"/> <input name="scid" value="792608" type="hidden"/> <input name="sum" class="sum" value='12' type="hidden" placeholder="0.00"><br><br> <span style="font-size: 18px;"><span style="color: rgb(0, 0, 0);">Введите сумму (*):<br> <input name="sumDouble" class="sumDouble" value='' onkeyup="sum.value = this.value" type="text" placeholder="0.00"><br><br> Введите Имя (*)<br> <input required name="customerNumber" class="customerNumber" value="" size="30"><br><br> Введите Телефон (*)<br> <input name="custName" value="" size="30" require><br><br> Введите Email (*)<br> <input required name="customerContact" class="email" onkeyup="cps_email.value = this.value" value="" placeholder="Укажите адрес электронной почты" size="30"/><br> Комментарии к заказу<br> <textarea name="orderDetails" value="" rows="5" cols="30" wrap="soft"></textarea><br><br> <input name="paymentType" value="AC" type="hidden"/> <input name="cps_email" class="cps_email" value="" type="hidden"/> <input name="ym_merchant_receipt" class="ym_merchant_receipt" value="" type="hidden"/> <input type="submit" class='button' value="Заплатить"/></span></span> </form> <script> let sum = document.querySelector('.sum').value, ym = document.querySelector('.ym_merchant_receipt'), sumDouble = document.querySelector('.sumDouble'); massivValue = { "customerContact": "+79680810048", "taxSystem": 1, "items":[{ "quantity": 1, "price": {"amount": `${sum}`}, "text": "Образовательный продукт от Андрея Чаплюкова", "tax": 1, "paymentMethodType": "full_prepayment", "paymentSubjectType": "commodity"}] } ym.value = JSON.stringify(massivValue); console.log(ym.value); var validateContact = function(value) { var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/, phoneReg = /^\+7[0-9]{10,11}/; isEmail = value.match(emailReg); isPhone = value.match(phoneReg); return (isEmail || isPhone); } var formatReceipt = function(form) { var customerContactValue = form.customerContact.value; massivValueObject = JSON.parse(ym.value); ym.value["items"][0].price.amount = sum; if(validateContact(customerContactValue)) { massivValueObject.customerContact = customerContactValue; ym.value = JSON.stringify(massivValue); form.submit(); } else { alert('Неверно введен контакт покупателя. Ограничения: только цифры (+792100000000) или адрес электронной почты.') return false; } }; </script> Буду очень благодарен любым решениям.. При вводе 12 в поле сумма, оплата начнёт проходить, можете проверить. |
Зачем же усложнять работу js этим `${sum}`, если проще и достаточно sum?
<input name="sum" class="sum" value='12' type="hidden" placeholder="0.00"> да еще и вкупе с <input name="sumDouble" class="sumDouble" value='' onkeyup="sum.value = this.value" type="text" placeholder="0.00"> смахивает на маразм. Это как раз и делает то, что вам хочется, вот только зачем такими окольными путями не понять. |
Просто я пытался разными путями, вот прям разными, из - за того что долго просидел над этой задачей не могу понять, почему он не получает это дурное значение.. И в итоге всё равно не работает. Т.е код корректен? Какими бы он танцами с бубном не был, я правильно понимаю ?
Суть вообще такова : нужно сумму которую введет клиент подставить в строку "price":{"amount": сюда сумма}. Но он не хватает эту сумму, поле ym_merchant_receipt должно быть равно сумме товаров внутри объекта, но т.к он один, мне нужно, чтобы поле sum совпадало со значение amount, тогда оплата пройдёт, вот и не могу понять, что делать.. Просил поэтому помощи, потому что форма до сих пор не пашет, а голова не может понять. Спасибо за действительно быстрый ответ, буду благодарен за дальнейшее напутствие. |
Странно называть цену суммой, ну ладно:
1) скрытое поле name="sum" удалить 2) в поле, в котором вводится, то что зачеркнуто удалить, то что красным добавить <input name="sum 3) `${sum}` - заменить на sum let sum = document.querySelector('.sum').value - в sum будет то значение, которое было на момент загрузки страницы, поэтому обработку полей, получение их значений нужно производить по событию отправления формы. Иначе чтобы вы не вводили в поле, отправляться будет всегда 12. Если действие по умолчанию отменяется, значит можно так: 1) в строке 3 js-кода: 2) строку 11 js-кода: 3) в функцию formatReceipt добавить строку кода: massivValue.price = {amount: document.querySelector('input[name=sum]').value}; |
Спасибо за быстрый ответ! К сожалению данные инструкции также не помогли..:cray: А то, что назвал цену - суммой, то извините, я просто заообъяснялся)
|
Цитата:
|
Я буду рад любой помощи и инструкции.. Дело не в том, что я не справился, но я сделал всё так, как Вы и сказали. Но не исключаю того, что я где - то мог пропустить что - то
|
Просто поразмышляйте над этим:
если бы не было вызова функции formatReceipt, в которой получается значение поля form.customerContact.value, то есть текущее на момент отправления формы, то адресат всегда бы получал вот это "customerContact": "+79680810048". Это же и происходит с ценой, поэтому и получать ее нужно при отправлении формы. Я не знаю зачем вся эта хрень и для чего создается объект, но коли и для него эта сумма нужна, и для яндекса, ну так определите ее в функции, передав обеим: var formatReceipt = function(form) { var customerContactValue = form.customerContact.value, sum = document.querySelector('input[name=sum]').value; //а вот это зачем тогда? massivValue.price = {amount: sum}; //это в объект massivValueObject = JSON.parse(ym.value); ym.value["items"][0].price.amount = sum; //это в яшку //далее код |
Часовой пояс GMT +3, время: 13:11. |