单击虚拟导轨“提交”按钮,在发布之前进行最终检查

时间:2015-04-06 22:12:11

标签: javascript forms ruby-on-rails-3 coffeescript braintree

我目前正在升级我们的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()

1 个答案:

答案 0 :(得分:0)

我意识到自己的错误......我所要做的就是改变这条线......

$('#place_order_submit').submit() to $('#place_order_submit').click()

(感谢@agf的建议。)