JQuery - 表单提交 - 很多次?

时间:2016-09-14 10:36:37

标签: javascript jquery forms submit

我有一个简单的问题,关于我的javascript代码我就是这样:



	$('form').submit( function (e) {
		var form = $(this);
		console.log('submit attempt');
		$('input, select, textarea').each(function() {
			var attr = $(this).attr('required');
			if (typeof attr == typeof undefined || attr == false || (attr = 'Y' && $(this).val() != '') ) {
				if($(this).hasClass('numeric')) {
					if(isNumber($(this).val())) {
						$(form).submit();
					}
				}
				else {
					$(form).submit();
				}
			}
			else {
				e.preventDefault();
				$(this).css('border','1px solid red');
			}
		});
	});




在控制台日志中,我收到了1300条“提交尝试”消息。然后是一个错误:

  

未捕获RangeError:超出最大调用堆栈大小

你们有没有想过为什么会发生这种情况以及如何解决这个问题?也许关于提交的一些棘手的事情()我忘记了吗?

如果需要更多信息,请告诉我。

谢谢!

2 个答案:

答案 0 :(得分:1)

问题是您是在提交中再次提交表单,并以递归方式调用它。这就是你应该怎么做的。如果验证失败,则isValid包含false并停止提交表单;

    $('form').submit(function(e){
var isValid = true;
    $('input, select, textarea').each(function() {
            var attr = $(this).attr('required');
            if (typeof attr == typeof undefined || attr == false || (attr = 'Y' && $(this).val() != '') ) {
                if($(this).hasClass('numeric')) {
                    if(!isNumber($(this).val())) {
                        isValid = false;
            return isValid;
                    } else {
                          e.preventDefault();
                          $(this).css('border','1px solid red');
                     }
                }

            }
            else {
        e.preventDefault();
                $(this).css('border','1px solid red');
        isValid = false;
        return isValid;
            }
        });
  return isValid;

});

答案 1 :(得分:0)

如果没有错误,表单会随每个输入或文本区域一起提交。

因此,首先循环字段,定义是否存在故障。如果没有,请发送:

$('form').submit(function(e) {
  var form = $(this);
  var failure = false;
  console.log('submit attempt');
  $('input, select, textarea').each(function() {
    var attr = $(this).attr('required');
    if (typeof attr == typeof undefined || attr == false || (attr = 'Y' && $(this).val() != '')) {
      failure = true;
      $(this).css('border', '1px solid red');
    }
    if ($(this).hasClass('numeric') && !isNumber($(this).val())) {
      failure = true;
      $(this).css('border', '1px solid red');
    }
  });
  if (failure) {
    e.preventDefault();
  }
});