Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 12.07.2020, 14:40
Новичок на форуме
Отправить личное сообщение для Nikita_32 Посмотреть профиль Найти все сообщения от Nikita_32
 
Регистрация: 12.07.2020
Сообщений: 4

Получение из поля цены товара в объект
Дорогие товарищи программисты, имеется форма написанная на 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 в поле сумма, оплата начнёт проходить, можете проверить.
Ответить с цитированием
  #2 (permalink)  
Старый 12.07.2020, 21:48
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,484

Зачем же усложнять работу 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"> смахивает на маразм.

Это как раз и делает то, что вам хочется, вот только зачем такими окольными путями не понять.
Ответить с цитированием
  #3 (permalink)  
Старый 13.07.2020, 11:00
Новичок на форуме
Отправить личное сообщение для Nikita_32 Посмотреть профиль Найти все сообщения от Nikita_32
 
Регистрация: 12.07.2020
Сообщений: 4

Просто я пытался разными путями, вот прям разными, из - за того что долго просидел над этой задачей не могу понять, почему он не получает это дурное значение.. И в итоге всё равно не работает. Т.е код корректен? Какими бы он танцами с бубном не был, я правильно понимаю ?

Суть вообще такова :
нужно сумму которую введет клиент подставить в строку "price":{"amount": сюда сумма}.

Но он не хватает эту сумму, поле ym_merchant_receipt должно быть равно сумме товаров внутри объекта, но т.к он один, мне нужно, чтобы поле sum совпадало со значение amount, тогда оплата пройдёт, вот и не могу понять, что делать.. Просил поэтому помощи, потому что форма до сих пор не пашет, а голова не может понять. Спасибо за действительно быстрый ответ, буду благодарен за дальнейшее напутствие.
Ответить с цитированием
  #4 (permalink)  
Старый 13.07.2020, 12:21
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,484

Странно называть цену суммой, ну ладно:

1) скрытое поле name="sum" удалить
2) в поле, в котором вводится, то что зачеркнуто удалить, то что красным добавить

<input name="sumDouble" class="sumDouble" value=''onkeyup="sum.value = this.value12" type="text" pattern="\d{M,N}(\.\d{1,2})?" placeholder="0.00" required> заменив в шаблоне M на минимально возможное, а N на макс. возможное количество цифр целого значения, то есть, если цена возможна от 99 до 999, значит должно быть 2,3

3) `${sum}` - заменить на sum

let sum = document.querySelector('.sum').value - в sum будет то значение, которое было на момент загрузки страницы, поэтому обработку полей, получение их значений нужно производить по событию отправления формы. Иначе чтобы вы не вводили в поле, отправляться будет всегда 12. Если действие по умолчанию отменяется, значит можно так:

1) в строке 3 js-кода: sum = document.querySelector('.sum').value,
2) строку 11 js-кода: "price": {"amount": `${sum}`},
3) в функцию formatReceipt добавить строку кода:
massivValue.price = {amount: document.querySelector('input[name=sum]').value};

Последний раз редактировалось laimas, 13.07.2020 в 14:15.
Ответить с цитированием
  #5 (permalink)  
Старый 14.07.2020, 02:01
Новичок на форуме
Отправить личное сообщение для Nikita_32 Посмотреть профиль Найти все сообщения от Nikita_32
 
Регистрация: 12.07.2020
Сообщений: 4

Спасибо за быстрый ответ! К сожалению данные инструкции также не помогли.. А то, что назвал цену - суммой, то извините, я просто заообъяснялся)
Ответить с цитированием
  #6 (permalink)  
Старый 14.07.2020, 02:30
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,484

Сообщение от Nikita_32
К сожалению данные инструкции также не помогли.
Я бы дал инструкцию - выбросить всю эту муть, и сделать проще, но если вы и с этой "инструкцией" не справились, тогда не знаю как.
Ответить с цитированием
  #7 (permalink)  
Старый 14.07.2020, 19:24
Новичок на форуме
Отправить личное сообщение для Nikita_32 Посмотреть профиль Найти все сообщения от Nikita_32
 
Регистрация: 12.07.2020
Сообщений: 4

Я буду рад любой помощи и инструкции.. Дело не в том, что я не справился, но я сделал всё так, как Вы и сказали. Но не исключаю того, что я где - то мог пропустить что - то
Ответить с цитированием
  #8 (permalink)  
Старый 15.07.2020, 02:08
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,484

Просто поразмышляйте над этим:

если бы не было вызова функции 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; //это в яшку
            
            //далее код
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Считать из текстового файла данные в объект или в массив Shushpan4ik Node.JS 0 15.03.2020 11:32
Динамическое изменение цены при изменении количества товара MrNix21 Элементы интерфейса 9 08.12.2013 19:47
получение значения поля eidicon jQuery 4 02.07.2012 18:06
Получение значения поля объекта зная путь к полю и сам объект mgvmax Общие вопросы Javascript 11 07.03.2012 17:09
Получение ссылки на объект в обработчике нажатия кнопки pauluss ExtJS 1 22.06.2011 14:27