Использование этого кода для получения форм с определенным классом и обработки определенных действий:
$('.stripe_payment').submit(function(e) {
var frm = $(this);
var token_input = $('#' + frm.attr('token_input'));
console.info("submit");
console.info( $(token_input).val() );
if ($(token_input).val() == "") {
console.info("empty tk");
var handler = StripeCheckout.configure({
key: 'pk_test_kOFWqH1EnP8UcrS3AqCYd4mQ',
image: 'https://stripe.com/img/documentation/checkout/marketplace.png',
locale: 'auto',
token: function(token) {
if (token.id) {
$(token_input).val(token.id);
$(frm).submit();
return true;
}
}
});
// Open Checkout with further options:
handler.open({
name: 'Integra Telecommunications Ltd',
description: '2 widgets',
zipCode: true,
currency: 'gbp',
amount: 2000
});
e.preventDefault();
}
// Close Checkout on page navigation:
window.addEventListener('popstate', function() {
handler.close();
});
});
и моя HTML-форма:
<form id = "topup_form" class = "stripe_payment" token_input = "stripe_token" method = "post" action = "/telecoms/sms/balance?ac=<?php echo $account["sequence"]; ?>">
<input type = "text" id = "stripe_token" />
<input type = "submit" name = "submit" id = "topup_submit" class = "btn btn-default pull-right" value = "Order Credits" />
</form>
При отправке формы обработчик открывается нормально, и я ввожу данные.
Затем token.id
возвращается и заполняется в поле ввода в форме, но $(frm).submit();
не отправляет форму в обычном режиме.
Я пробовал заменить $(frm).submit();
на $(this).submit();
, а также заменить return true;
на return false;
, но все тот же
хм, я имею в виду, что хочу preventDefault, если token_input
пуст, а если он не пуст, то отправить HTML-форму
это правильно, preventDefault должен произойти, когда if истинно (if ($(token_input).val() == "") {
)
проверить, что if ($(token_input).val() == "") {
верен?
это правда, когда форма отправляется впервые, console.info("empty tk");
отображается в консоли, которая находится внутри if
. тогда, когда предполагается, что $(frm).submit();
вызывается, он не отображается в консоли
так что я знаю, что инструкция if
работает. это просто $(frm).submit();
, который не работает
Хорошо, значит, в первый раз, когда он попадает в if, работает ли handler
, но затем отправка в методе токена не работает, верно?
$(token_input).val(token.id);
работает и заполняет ввод, но $(frm).submit();
ничего не делает
Вы видите вывод console.info("submit");
во второй раз, как только он вернет токен?
да, это появляется снова во второй раз, как и значение token_input
, а console.info("empty tk");
не отображается
Это говорит о том, что отправка работает. Отсутствие пустого tk показывает, что if ложно. Таким образом, если форма не отправляется, то это может означать, что есть еще что-то, что мешает отправке формы, а не этот блок кода, который у вас есть.
Попробуйте сделать frm.get(0).submit()
. Это должно выполнить отправку в базовой форме, а не в объекте jQuery с формой, что должно привести к тому, что все обработчики отправки для формы, которую jQuery обошли.
только что получил это: Uncaught TypeError: frm.get(...).submit is not a function
Что ж, странно. Что вы увидите в консоли, если сделаете console.info(frm.get(0))
?
Я проверю - $('#topup_submit').click();
, похоже, работает, это кнопка, но это не вариант, потому что идентификатор кнопки не всегда будет одинаковым
console.info(frm.get(0))
возвращает форму HTML
Да, я ожидал этого, поэтому не понимаю, почему он может подумать, что метод отправки не определен.
Позвольте нам продолжить обсуждение в чате.
если
if
ложный, то я не хочу предотвращать дефолт. я хочу использовать только preventdefault, если значениеtoken_input
пустое