2014-11-05 57 views
3

我想在用戶提交表單之後但在離開頁面之前顯示註釋。如何使用jQuery來延遲事件傳播

目前我使用這個(減少示例代碼):

$('form').submit(function(event) { 
    $('.note').show(); 

    setTimeout(function() {     
     $('form').unbind().submit(); 
    }, 2000); 

    return false; 
}); 

這工作,但似乎並沒有對我好。有沒有其他方式,如功能$.delayPropagation(2000);

PS:注意事項覆蓋了整個屏幕,因此在此期間用戶將無法再次提交。

+1

「'似乎沒有被nice'」是沒有問題的一個很好的技術說明。再試一次? :) – 2014-11-05 12:30:49

+0

@TrueBlueAussie沒錯。它有效,但我這樣做似乎是錯誤的。它看起來像某種「解決問題」和骯髒的解決方案。 – lampshade 2014-11-05 12:32:17

+0

沒關係。無論如何,你將不得不使用setTimeout。 – dfsq 2014-11-05 12:32:59

回答

3

這是延遲操作的適當方式。

您可能實際上首先要解除事件以停止多個呼叫(您目前有2秒鐘的時間可以再次提交)。

作爲一種標準的做法,您只應該運行一次jQuery選擇器(使用temp var來保存結果)。 $前綴也是命名jQuery變量的另一個標準。現在這意味着下面的代碼將單獨支持頁面上的多個表單。

$('form').submit(function(event) { 
    var $form = $(this); 
    $('.note').show(); 
    $form.unbind() 
    setTimeout(function() {     
     $form.submit(); 
    }, 2000); 

    return false; 
}); 

您必須馬上爲return false以避免阻塞瀏覽器。

注:

  • 另一種方法是使用Ajax的形式後,再有延遲,則跳轉至一個新的頁面
  • setTimeout是從執行的延遲代碼最ubiquitous方式。

注:我只是想用這個詞ubiquitous在後:)

+0

+1感謝您的努力。我現在根據你的建議直接取消綁定。 – lampshade 2014-11-05 12:41:20

+1

我總是在變量中存儲選擇器 - 我只是想讓示例代碼儘可能容易閱讀。 :) – lampshade 2014-11-05 12:43:00