【问题标题】:Re-enabling Submit after prevent default阻止默认后重新启用提交
【发布时间】:2012-03-25 00:34:26
【问题描述】:

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

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

此代码非常适合我想要的。只是最后一件事,并在我得到这个之后重置我可以实现的 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

【问题讨论】:

  • 您可以在表单的提交事件中尝试 e.preventDefault() 和 self.submit() 以获得相反的效果

标签: javascript jquery


【解决方案1】:

不要尝试在验证函数中设置和取消提交处理程序,反之亦然:从单个提交处理程序中调用验证,并且仅在验证失败时调用.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.
    });

【讨论】:

  • 在切换到使用 return 语句之前,您可能需要查看此内容:http://fuelyourcoding.com/jquery-events-stop-misusing-return-false/ 此外,使用 preventDefault() 可以让您一次显示所有验证错误,从而提供更清晰的用户体验。
  • @lhoess - 我同意一次显示所有验证错误更好(这就是我在自己的项目中所做的),但我不同意使用 return 是一种“误用” - 如果您想要的效果是立即退出处理程序,并且您知道冒泡无关紧要(对于从表单提交,我通常不关心冒泡),那很好。当然你可以妥协并选择event.preventDefault(); return;(没有false)。
  • 只是尝试你的第一个答案对我有帮助,因为返回的第二个没有,仍然 thx
【解决方案2】:

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

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

这假设您有一个普通的(不是 Ajax)表单。

【讨论】:

  • 哇,它起作用了,我把代码放在了错误的位置。谢谢你在定时器关闭时接受它。
  • 不客气。我猜对了你想要做什么?您想禁用自定义验证吗?
  • 是的,你猜对了。我被告知我做得不对:/
【解决方案3】:

只需在表单上调用提交

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

【讨论】:

  • 这取决于你打算做什么 - 通常你会在 ajax 调用之后调用它。
【解决方案4】:

这确实有效并在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)
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-18
    • 2014-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多