2012-08-29 138 views
0

我的形式讓用戶提交的一首詩。禁用表單按鈕的onClick,然後提交表單

有時候,有一個爲該網頁上一個新的用戶名(如果沒有人登錄)的字段。在這種情況下,我想覆蓋按鈕點擊,以便首先對其進行簽名:

$('#submit-poem').click -> 
    $('input[type=submit]').attr('disabled', true) 
    if $('#new_poet_name_field').length 
    signUp(); // This will submit the poem form after registering 
    false 
    else 
    console.log("A poet was already logged in!") 
    true 

這用於正常工作。但是現在,當沒有new_poet_name_field時,提交按鈕保持禁用狀態。返回true用於提交表單。現在,如果沒有poet_name_field,我必須明確地做$('#new_question')[0].submit()

爲什麼當返回true並不形式提交?我的解決方法令人擔憂;表單可能現在提交兩次似乎是可能的:一次當我明確提交時,一次返回true

+0

不是超級有關,但風險有人用「確認」或其他一些關鍵的提交和完全繞過你的點擊。可能更容易掛鉤表單的「提交」事件並在那裏返回錯誤/真實。 –

+0

讓我看看HTML,爲什麼當你提交它時沒有表單? – Starx

回答

1

你應該綁定到表單「提交」事件並使用時,你希望有人代替簽名提交詩達的preventDefault /返回false。這樣就沒有必要做任何禁用/啓用按鈕。

+0

綁定到提交事件工作,這就是它之前,我打破它! – bevanb

0

我不喜歡沒有一個形式的想法。它無效,肯定不會遵循HTML的規範。

每一個建設性的表單元素應該是一個表單標籤裏面包裹。您可以通過多種方式控制表單的提交。


您所使用的代碼是可怕的

  1. 爲什麼?是否有多個提交按鈕?下面的代碼會禁用頁面上的每個提交按鈕,也可能是其他形式。

    $('#submit-poem').click -> 
        $('input[type=submit]').attr('disabled', true) 
    
  2. 這是錯誤的方法來檢查提交的真實性,它可以很容易地與像螢火蟲工具操縱。

    if $('#new_poet_name_field').length 
        signUp(); 
    

如果查不到,如果用戶登錄或不那麼重要,那麼你可以迅速發送到服務頁面Ajax請求,得到您的信息

$('#submit-poem').click(function() { 
    $(this).attr('disabled', true) 
    $.post("yourservicepage.php", {}, function(data) { 
      // RE suppose, data is the boolean value from server indicating logged in or not 
      if(data != true) { 
      signup(); //if not logged in then signup 
      } 
      //... 
    }); 
}); 
+0

我不太清楚。 「詩」總是有一個表格。我的意思是,有時候會有一個'poet_name'的字段(如果沒有人登錄)。 – bevanb

+0

@bevanb,檢查是否有人登錄,會話服務器的基礎上,而不是JS。 – Starx