防止默认后重新启用提交

时间:2012-03-25 00:34:27

标签: javascript jquery

我正在尝试取消绑定或重新启用防止默认设置,以便我的表单会提交好的数据。

我尝试过多个例子。这是我的代码和我尝试过的一些例子。

此代码非常适合我想要的内容。只是最后一件事,并重新设置我可以实现的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

4 个答案:

答案 0 :(得分: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.
    });

答案 1 :(得分:5)

我不完全确定你在问什么,但如果你的目标是销毁你的自定义submit处理程序,那么使用它:

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

这假设你有一个普通的(不是Ajax)形式。

答案 2 :(得分:1)

只需在表单上调用提交

即可
$('#ShoutTweet').submit();

答案 3 :(得分:0)

这可以肯定地工作,并允许在event.preventDefault();之后提交表单

$('#your-login-form-id').on('submit', onSubmitLoader);

function onSubmitLoader(e) {
    e.preventDefault();
    var self = $(this);
    setTimeout(function () {
        self.unbind('submit').submit(); // like if wants to enable form after 1s
    }, 1000)
}