单击虚拟 rails 'submit' 按钮,在发布前进行最后检查
Click dummy rails 'submit' button that does final checks before posting
我目前正在升级我们的 Braintree SDK,它使用 JavaScript 劫持 Rails 表单 'submit' 按钮,调用 Braintree.js,成功后,允许我们Post我们的数据正常。
问题是我们已经在使用提交按钮,使用几个 JavaScript 方法检查表单数据,然后调用 $form.submit()
继续 Post 处理数据。两者是矛盾的。
我的解决方案是创建一个伪造的 "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 应该做的事情(即仔细检查订单)然后 "click" 提交表单按钮让它 process/post 正常(允许它被 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()
我意识到我的错误...我所要做的就是更改此行...
$('#place_order_submit').submit() to $('#place_order_submit').click()
(感谢@agf 的建议。)
我目前正在升级我们的 Braintree SDK,它使用 JavaScript 劫持 Rails 表单 'submit' 按钮,调用 Braintree.js,成功后,允许我们Post我们的数据正常。
问题是我们已经在使用提交按钮,使用几个 JavaScript 方法检查表单数据,然后调用 $form.submit()
继续 Post 处理数据。两者是矛盾的。
我的解决方案是创建一个伪造的 "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 应该做的事情(即仔细检查订单)然后 "click" 提交表单按钮让它 process/post 正常(允许它被 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()
我意识到我的错误...我所要做的就是更改此行...
$('#place_order_submit').submit() to $('#place_order_submit').click()
(感谢@agf 的建议。)