【问题标题】:jQuery Maximum call stack size exceededjQuery 超出最大调用堆栈大小
【发布时间】:2016-02-03 23:50:53
【问题描述】:

我正在使用以下代码验证表单:

$('#wpcf7-f96-o1 form').submit(function(e){
    e.preventDefault();
    var data = [
        '[name="text-854"]',
        '[name="text-855"]',
        '[name="text-856"]',
        '[name="email-375"]'
    ]
    $.each(data, function(key, value) {
        if($('input'+value).val() == ''){
            $('input'+value).css({'border':'1px solid red'})
            valid = false
        } else {
            $('input'+value).css({'border':'1px solid #888'})
            valid = true
        }
    })
    if(valid){
        $('#wpcf7-f96-o1 form').submit()
        $('.form_success').css({'display':'block'});
        return false;
    } else {
        $('.form_error').css({'display':'block'});
        return false;
    }
});

通过阅读有关此问题的堆栈溢出,我了解到这可能是某个地方的无限循环。我只是不确定自己做错了什么。

谢谢!

【问题讨论】:

  • 您正在提交处理程序中触发提交,最终进入无限循环。您的逻辑在这方面也没有意义,因为您在同一个表单上引发相同事件后从提交处理程序return false,所以我不确定您到底期待什么行为。
  • @Stryner 不确定您要做什么,但这不起作用。 @Rory McCrossan 我希望表单在valid 为真时提交(所有字段都有值)。所以我应该删除 e.preventDefault() ,然后如果数据不存在则返回 false ..?
  • 没错。我为您添加了带有完整示例的答案。

标签: jquery


【解决方案1】:

错误是因为您在提交事件处理程序中触发了提交事件并以无限循环结束。

如果valid为真,我希望表单提交(所有字段都有值)

如果是这种情况,您应该将e.preventDefault() 从其当前位置移出,并且仅在valid 不正确时调用它。试试这个:

$('#wpcf7-f96-o1 form').submit(function(e) {
    var data = [
        '[name="text-854"]',
        '[name="text-855"]',
        '[name="text-856"]',
        '[name="email-375"]'
    ];

    $.each(data, function(key, value) {
        if($('input' + value).val() == ''){
            $('input' + value).css({ 'border': '1px solid red' })
            valid = false
        } else {
            $('input' + value).css({ 'border': '1px solid #888' })
            valid = true
        }
    });

    if (valid) {
        $('.form_success').show();
    } else {
        e.preventDefault(); // stop the form submission here
        $('.form_error').show();
    }
});

另外请注意,添加/删除外部样式表中定义的类比通过css() 方法添加自定义规则更好。

【讨论】:

  • 唯一的问题是表单在成功验证后不再发送电子邮件
  • 我假设提交表单时电子邮件是从服务器发送的?我会看看调试处理表单数据的服务器代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-18
  • 2013-07-31
  • 1970-01-01
  • 1970-01-01
  • 2015-10-24
  • 2015-12-29
  • 2017-12-27
相关资源
最近更新 更多