Javascript 未捕获类型错误:对象#<;HTMLInputElement>;没有方法';processCard&x27;

Javascript 未捕获类型错误:对象#<;HTMLInputElement>;没有方法';processCard&x27;,javascript,jquery,class,coffeescript,Javascript,Jquery,Class,Coffeescript,我正在尝试配置一个coffeescript类来管理条带支付。我的解决方案是基于 这是我的密码: class Subscription count = 0 page = createForm: "form#new_subscription" createButton: 'input#create_subscription[type=submit]' cardNumber: '#card_number' cardCode: '#card_code'

我正在尝试配置一个coffeescript类来管理条带支付。我的解决方案是基于

这是我的密码:

class Subscription  

  count = 0

  page =
    createForm: "form#new_subscription"
    createButton: 'input#create_subscription[type=submit]'
    cardNumber: '#card_number'
    cardCode: '#card_code'
    cardMonth: '#card_month'
    cardYear: '#card_year'
    stripeError: '#stripe_error'

  setupForm: ->
    console.log "binding to submit"
    $(page.createButton).click (e) -> 
      $(page.createButton).attr('disabled', true)
      @processCard()
      return false

  processCard: ->
    console.log "processing card"
    card =
      number: $(page.cardNumber).val()
      cvc: $(page.cardCode).val()
      expMonth: $(page.cardMonth).val()
      expYear: $(page.cardYear).val()

    Stripe.card.createToken(card, subscription.handleStripeResponse);

  handleStripeResponse: (status, response) ->
    if response.error
      console.log "error"
      $(page.stripeError).text(response.error.message)
      $(page.createButton).attr('disabled', false)
      alert ("bla")
    else
      alert("success: " + response.id)

jQuery ->
  Stripe.setPublishableKey($('meta[name="stripe-key"]').attr('content'))
  subs = new Subscription
  subs.setupForm()
问题是,当我单击“提交”按钮时,会出现异常:

Uncaught TypeError: Object #<HTMLInputElement> has no method 'processCard'
uncaughttypeerror:对象#没有方法“processCard”
我相信这是因为在click事件调用的方法中,
self
是触发事件的html元素。而我自己需要javascript对象

有没有关于如何解决这个问题的线索


谢谢,

在没有测试实际代码的情况下,看起来您的作用域搞错了

setupForm: ->
  console.log "binding to submit"
  $(page.createButton).click (e) => 
    $(page.createButton).attr('disabled', true)
    @processCard()
    return false
通过使用
$(page.createButton)中的胖箭头(
=>
),单击(e)=>
,您将外部作用域
传递到回调内部,然后可以调用
@processCard()
(其中,
@
将引用
新订阅
实例,而不是jQuery
引用,它是一个
HTMLInputElement