2012-03-25 114 views
6

我想取消綁定或重新啓用防止默認,所以我的表單將提交良好的數據。重新啓用提交後防止默認

我試過了多個例子。這是我的代碼和我嘗試的一些例子。

此代碼適用於我想要的功能。只是最後一件事,並重置我可以實現後,我得到這個div。

function lengthRestriction(elem, min, max) { 
    var uInput = elem.value; 
    if (uInput.length >= min && uInput.length <= max) { 
     return true; 
    } else { 
     var cnt = document.getElementById('field'); 
     cnt.innerHTML = "Please enter between " + min + " and " + max + " characters"; 
     elem.focus(); 
     $('#ShoutTweet').submit(function(e) { 
      e.preventDefault(); 

      //bind('#ShoutTweet').submit(); 
      //$('#ShoutTweet').trigger('submit'); 
     }); 
    } 
}​ 

我有一個jsbin設置太http://jsbin.com/ebedab/93

+0

你可以在相反的效果 – dimirc 2012-03-25 00:40:00

回答

5

上我不能完全確定你的要求,但如果你的目標是摧毀您的自定義submit處理程序,然後使用此:

$("#ShoutTweet").unbind("submit"); 

這假設你有一個正常的(不是Ajax)表單。

+0

哇它的工作,我把代碼放在錯誤的地方。謝謝,如果定時器關閉,請接受它。 – 2012-03-25 00:42:29

+0

不客氣。我猜猜你正在嘗試做什麼?你想禁用你的自定義驗證? – 2012-03-25 00:43:30

+0

是的,你猜對了。我被告知我沒有正確地做:/ – 2012-03-25 01:00:41

1

就叫提交表單

$('#ShoutTweet').submit(); 
+0

形式和self.submit()的提交事件嘗試e.preventDefault()我應該把它放在代碼塊嗎? – 2012-03-25 00:39:54

+0

這取決於你打算做什麼 - 通常你會在ajax調用之後調用它。 – max 2012-03-25 00:42:26

7

不要試圖設置和取消從你的驗證函數內提交處理程序,做到這一點的其他方式:單提交處理程序內調用驗證,並只調用.preventDefault()如果驗證失敗:

$(document).ready(function() { 

    $('#ShoutTweet').submit(function(e) { 
     if (/* do validations here, and if any of them fail... */) { 
      e.preventDefault(); 
     } 
    }); 

}); 

如果您所有的驗證通過,只是不要撥e.preventDefault(),然後提交事件將默認發生。

或者您可以從您提交處理返回false防止默認:

$('#ShoutTweet').submit(function(e) { 
     if (!someValidation()) 
      return false; 

     if (!secondValidation()) 
      return false; 

     if (someTestVariable != "somevalue") 
      return false; 

     // etc. 
    }); 
+0

虐待也試試這個。喜歡學習正確的方式去做事 – 2012-03-25 00:52:48

+0

您可能想在切換到使用return語句之前查看它:[http://fuelyourcoding.com/jquery-events-stop-misusing-return-false/](http:/ /fuelyourcoding.com/jquery-events-stop-misusing-return-false/) 此外使用preventDefault()將允許您一次顯示所有驗證錯誤,以提供更清晰的用戶體驗。 – lhoess 2012-08-09 15:15:33

+0

@lhoess - 我同意一次顯示所有驗證錯誤更好(這就是我在自己的項目中所做的),但我不同意使用回報是「錯誤使用」 - 如果您想要退出的效果處理程序立即,你知道冒泡並不重要(並且從表單提交我通常不關心冒泡),那麼它是好的。當然,你可以妥協,並與'event.preventDefault(); return;'(沒有'false')。 – nnnnnn 2012-08-09 21:34:58