Chrome崩溃与这个JS

Chrome crashes with this JS

本文关键字:JS 崩溃 Chrome      更新时间:2023-09-26

Chrome浏览器崩溃。有一个具有多个输入的表单。JS代码必须在提交之前检查它们是否被填充。但是成功提交后Chrome崩溃了。

<script>
$(document).ready(function(){
    var form = $('form#add');
    form.submit(function(){
      var filledInputs = $('form#add input[value!=""]');
      $('form#add input[value=""]').css('border','solid 1px red');
      filledInputs.css('border','');
      if (filledInputs.length >= 9) {
          form.submit();
          return true;
      } else {
          return false;
      }
    });
});
</script>

当有>=9填充输入时,您的函数是无限递归的。在提交时,表单执行验证,如果验证通过,则再次调用submit来验证表单,以此类推。

如果您删除form.submit();,只返回true,表单将正确提交

您的表单已经提交,您不需要再次提交:

if (filledInputs.length >= 9) {
    // form.submit();
    return true; // return true is to continue with the form submission
} else {
    return false;
}

把代码缩短一点,问题就明显了:

form.submit(function(){
    form.submit();
})

这会导致无限递归,耗尽堆栈,并导致通常导致chrome中止脚本(或崩溃)。

你可以这样做:

form.submit(function () {
    var filledInputs = $('form#add input[value!=""]');
    $('form#add input[value=""]').css('border', 'solid 1px red');
    filledInputs.css('border', '');
    return (filledInputs.length >= 9);
});

表单将根据输入字段的验证提交。