2012-03-25 66 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