我目前正在升级我们的Braintree SDK,它使用JavaScript来劫持Rails表单的“提交”按钮,调用Braintree.js,并且成功后,我们可以正常发布我们的数据。
问题是我们已经捎带提交按钮,使用一些JavaScript方法检查表单数据,然后调用$form.submit()
继续发布数据。这两者是相互矛盾的。
我的解决方案是创建一个虚假的“提交”按钮,点击它,让它运行验证数据的方法,然后让它调用$form.submit()
,允许Braintree.js劫持真正的提交按钮。我没有正确地在表单上调用提交调用吗?
我的虚假提交按钮后跟实际提交按钮(ID为:place_order_submit)...
%p.advance-container.clearfix
%input#check-order.btn.btn-xlarge.btn-primary.action-check-order{type: 'button', value: 'Check Order'}
%input#place_order.btn.btn-xlarge.btn-primary.action-submit{type: 'submit', id: 'submit', value: 'Place Order'}
这是Coffeescript应该做的事情(即仔细检查订单),然后“点击”提交表单按钮,让它正常处理/发布(允许它被Braintree劫持)。
$form: $('form')
$formGroups: $(".form-group")
formGroupIds: $('.form-group').map -> $(this).attr('id')
lastFormGroupId: $(".form-group").last().attr('id')
$checkOrderButton: $('#check-order')
@$checkOrderButton.on 'click', (event)=>
event.preventDefault()
try
q.Orders.items.isAssertAllAvailablePollEnabled = false
@$pageCover.show()
$.when(@items.ensureAllAvailable(), @shippingAddr.save(), @billingAddr.save())
.done =>
q.Logger.debug 'pre-Braintree requests done, go!'
q.Util.resetSubmissionState 'form'
@$checkOrderButton.off('click')
$('#place_order_submit').submit() # <-- THIS ISN'T WORKING
.fail ->
q.Orders.items.isAssertAllAvailablePollEnabled = true
q.Logger.warn "At least one pre-Braintree request failed, submit halted. Details: #{JSON.stringify(this, null, 4)}"
q.Util.resetSubmissionState 'form'
@$pageCover.hide()
catch ex
q.Logger.warn "pre-Braintree request failed with exception: #{ex}"
q.Util.resetSubmissionState 'form'
@$pageCover.hide()
答案 0 :(得分:0)
我意识到自己的错误......我所要做的就是改变这条线......
$('#place_order_submit').submit() to $('#place_order_submit').click()
(感谢@agf的建议。)