2

我有一個多步驟的形式,我在使用本教程中軌3設置:http://railscasts.com/episodes/217-multistep-forms如何在coffeescript,Rails 3應用程序中標識提交按鈕?

我可以通過點擊「繼續」和「後退」提交按鈕,進入下一個和前面的步驟的形式,分別。

我已經通過條紋插入支付形式形式的最後一頁上,而這需要以下的jQuery中的CoffeeScript:

videos.js.coffee

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

video = 
    setupForm: -> 
    $('#new_video').submit -> 
     if $('#card_number').length 
     video.processCard() 
     false 
     else 
     true 

所以這是我遇到的問題。除了「後退」按鈕,我的表單最後一頁的所有內容都起作用,就像我點擊「繼續」一樣。這顯然是因爲jQuery引用了表單上的所有「.submit」按鈕。

我想爲表單的最後一頁上的「繼續」提交按鈕指定一個id,「#uploadsubmit」,以便我可以再次使用後退按鈕。我如何在jQuery coffeescript中引用此ID?

回答

3

並不是說jQuery引用所有按鈕,而是它綁定到表單的submit事件。如果您專門爲繼續按鈕設置了ID並在此處添加了卡處理功能,則可能會忽略通過其他方式觸發的表單提交(如按「輸入」按鈕)。

你需要做的是確定其中提交按鈕被點擊。有些方法可以在沒有jQuery的情況下做到這一點,但是它們不是跨瀏覽器友好的。不過,您可以通過標記點擊的按鈕(例如,通過添加一個類。

$('#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 

所以一個按鈕被按下時,它就會被打上.wasclicked類。提交時,找到該按鈕,如果不是後退按鈕,則可以繼續處理該卡。然後刪除'wasclicked'按鈕(如果信用卡處理失敗等)。

你也可以只存儲點擊名稱,避免使用類,這樣的事情應該工作:

clickedName = null 

$('#new_video input:submit').click -> 
    clickedName = $(this).attr('name') 

$('#new_video').submit -> 
    if clickedName !== 'back_button' && $('#card_number').length 
    video.processCard() 
    clickedName = null 
    false 
    else 
    true 
+0

感謝您的及時回覆。我嘗試了兩種方法,爲了加載表單,我必須從「!==」中刪除一個「=」。後退按鈕適用於兩者,但不幸的是,當我提交表單時,條紋似乎無法處理令牌。 – user1429496 2012-08-12 18:26:40

+0

嗯,對不起。 CoffeeScript自動將'!='轉換爲'!=='; source中的'!=='是一個解析錯誤。至於第二部分,我不知道爲什麼條紋不起作用。 – numbers1311407 2012-08-12 19:35:04

+0

現在有效......我的縮進已關閉 – user1429496 2012-08-13 15:07:04

相關問題