Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Как подружить form.submit() и onsubmit()? (https://javascript.ru/forum/events/75189-kak-podruzhit-form-submit-i-onsubmit.html)

maiskiykot 11.09.2018 16:01

Как подружить form.submit() и onsubmit()?
 
Есть простенький виджет Тинькова:
<script src="https://securepay.tinkoff.ru/html/payForm/js/tinkoff_v2.js"></script>
<form name="TinkoffPayForm" onsubmit="pay(this); return false;">
	<input class="tinkoffPayRow" type="hidden" name="terminalkey" value="TinkoffBankTest">
	<input class="tinkoffPayRow" type="hidden" name="frame" value="true">
	<input class="tinkoffPayRow" type="hidden" name="language" value="ru">
    <input class="tinkoffPayRow" type="text" placeholder="Сумма заказа" name="amount" required>
    <input class="tinkoffPayRow" type="text" placeholder="Номер заказа" name="order">
    <input class="tinkoffPayRow" type="text" placeholder="Описание заказа" name="description">
    <input class="tinkoffPayRow" type="text" placeholder="ФИО плательщика" name="name">
    <input class="tinkoffPayRow" type="text" placeholder="E-mail" name="email">
    <input class="tinkoffPayRow" type="text" placeholder="Контактный телефон" name="phone">
    <input class="tinkoffPayRow" type="submit" value="Оплатить">
</form>


По нажатию кнопки работает отлично. Однако мне нужно обойти нажатие, чтобы не заставлять клиента лишний раз жать кнопку. Ставлю скрипт form.submit() и выдает чистый лист. Как это победить? Глубоких познаний в JS нет, поэтому просьба не пинать.

Nexus 11.09.2018 16:16

//Попробуйте так
const Form=document.querySelector('[name="TinkoffPayForm"]');
Form.dispatchEvent(new Event('submit'));
//или так
Form.querySelector('[type="submit"]').dispatchEvent(new Event('click'));

j0hnik 11.09.2018 17:21

document.querySelector('form[name="TinkoffPayForm"] [type="submit"]').click();

maiskiykot 11.09.2018 18:05

Как говорится: век живи - век лечись! Спасибо огромное - работает! Подскажите дураку: почему не срабатывало при form.submit()? И зачем они такой дурной вызов процедуры сделали? Если знаете.

Alexandroppolus 12.09.2018 18:40

Цитата:

Сообщение от maiskiykot
почему не срабатывало при form.submit()?

так миръ устроен.

предполагается, что если можно сделать программый вызов, то нефиг это через событие проводить окольными путями, надо просто взять и вызвать эту твою pay(form);. Навешивание функции как обработчик события, а потом программная диспетчеризация этого события специально для вызова функции - антипаттерн. Скажи антипаттернам "нет!"

ksa 14.09.2018 10:37

Цитата:

Сообщение от maiskiykot
почему не срабатывало при form.submit()?

Как раз он (submit()) и срабатывал...
Т.е. ты просто вызывал отправку формы, вот она и отправлялась.


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