0

Rails3アプリで支払いを受け入れるためにStripeを使用しています。Stripeには次のコーヒースクリプトが必要です。

jQuery ->
  Stripe.setPublishableKey($('meta[name="stripe-key"]').attr('content'))
  video.setupForm()

video =
  setupForm: ->
    $('#new_video input:submit').click ->
      $(this).addClass('wasclicked')

    $('#new_video').submit ->
      clickedBtn = $(this).find('.wasclicked')

      if clickedBtn.attr('name') != 'back_button' && $('#card_number').length
        video.processCard()
        clickedBtn.removeClass('wasclicked')
        false
      else
        true

  processCard: ->
    card =
      number: $('#card_number').val()
      cvc: $('#card_code').val()
      expMonth: $('#card_month').val()
      expYear: $('#card_year').val()
    Stripe.createToken(card, video.handleStripeResponse)

  handleStripeResponse: (status, response) ->
    if status == 200
      $('#video_stripe_card_token').val(response.id)
      $('#new_video')[0].submit()
    else
      $('#stripe_error').text(response.error.message)
      $('input[type=submit]').attr('disabled', false)

私のアプリでは、顧客への請求が0の場合、Stripeクレジットカードのフィールドは非表示になっており、フォームを正常に送信する必要はありません。私のコントローラーのこのステートメントはそれを説明しています:

@video.save if @video.all_valid? && ((@total > 0 && @video.save_with_payment(@total)) || @total == 0)

私が抱えている問題は次のとおりです。料金が0で、フォームで支払いが不要な場合、送信ボタンを押してフォームを送信しても何も起こりません。クリックしてクリックするだけで、何の反応もありません。ただし、ページをリロードすると、フォームは正常に送信されます。

Stripeのcoffeescriptファイル(上記)を削除したところ、この場合は送信ボタンが機能しました。では、この例でコーヒースクリプトを無効にするにはどうすればよいですか?「if」ステートメントは私のコントローラーまたはコーヒースクリプトに入りますか?

4

1 に答える 1

2

送信イベントでfalseを返すと、フォームを送信できなくなります。この動作を望まない場合は、false以外の値を返します。この場合、料金が0の場合は、処理をすべてバイパスする必要があるように思われます。これが必要なものです。

$('#new_video').submit ->
  clickedBtn = $(this).find('.wasclicked')

  if clickedBtn.attr('name') != 'back_button' && $('#card_number').length && $('#charge').val() > 0
    video.processCard()
    clickedBtn.removeClass('wasclicked')
    false
  else
    true
于 2012-08-15T19:23:18.987 に答える