У меня есть форма, которая просто не работает, поскольку я пытаюсь сделать ее готовой для braintree, чтобы создать пользовательскую форму для информации о кредитной карте.Uncaught TypeError: FormNapper требует элемента HTMLFormElement или строки id из одного
Однако, если я создаю эту форму в UiBinder:
<g:HTML ui:field="creditCardFormContainer">
<form id="credit-card-form" name="credit-card-form" action="/app/create-credit-card" method="post" target="hidden-iframe">
<label for="card-number">Card Number</label>
<div id="card-number"/>
<label for="cvv">CVV</label>
<div id="cvv"/>
<label for="expiration-date">Expiration Date</label>
<div id="expiration-date"/>
<input id="nonce" name="nonce" type="hidden" value="" />
<input type="submit" value="Add credit card" />
</form>
</g:HTML>
и сделать проверку типа credit-card-form
я на самом деле видим, что не типа я ожидал это должно быть:
private native void setupCreditCardForm(String domId, String serverToken) /**/-{
var form = $doc.getElementById(domId);
if (form instanceof HTMLFormElement != true) {
console.log(typeof(form)); // Prints 'object'
throw new TypeError("Form must be of type HTMLFormElement"); // Gets thrown ..
}
// Never reached ..
var bt = braintree;
braintree.setup(
serverToken,
"custom",
{
id: domId,
hostedFields: {
number: {
selector: "#card-number"
},
cvv: {
selector: "#cvv"
},
expirationDate: {
selector: "#expiration-date"
}
},
onPaymentMethodReceived: function(details) {
[email protected]InfoView::onPaymentMethodReceived(Ljava/lang/String;)(details.nonce);
}
});
}-/**/;
Почему это так? Я явно создаю здесь form
- почему это не работает?
Я делаю это как here, а также описано в documentation.
Удаление этот чек выше дал бы мне следующую ошибку приходя от braintree.setup()
:
FormNapper requires an HTMLFormElement element or the id string of one.
Hm, если я назначаю 'var b = braintree', то' b' будет действительным объектом. Если я использую '$ wnd.braintree', то нет объекта. Я использую 'ScriptInjector' для загрузки файла JavaScript с диалогиями и до сих пор вызывается функция настройки. Не уверен, почему '$ wnd' не работает – displayname
Вам нужно сказать' ScriptInjector', чтобы ввести в 'TOP_WINDOW'. Или вы могли бы попробовать передать элемент 'form' вместо этого, если ID (в зависимости от того, насколько хорошо Braintree обрабатывает элементы кросс-окна) –
Омг спасибо, вот и все! После инъекции в «TOP_WINDOW» это сработало! Я не знаю, смогу ли я когда-либо осознать это самостоятельно. – displayname