元素未显示在iOS表单提交中



我想要什么:
提交表单时,显示"订单处理"元素。

我做了什么:

$("#register").validate({
  errorPlacement: function(error, element) { },
  submitHandler: function(form) {
    $('.processing-wrapper').removeClass('hidden');
    form.submit();
  }
});

我的经历:

  • 在桌面上,一切如常-https://www.youtube.com/watch?v=n7zOsmA6qCA
  • 在iOS上,我从未见过"订单处理"元素-https://www.youtube.com/watch?v=t5xbYchqJpE

我尝试过的:

  • 我注释掉了表单.submit();只是想看看"订单处理"元素是否会出现在iOS上,它确实出现了。但是当提交表单时,我从来没有看到处理元素
  • 我尝试添加setTimeout来延迟表单提交,看看这是否会让"订单处理"元素有更多的时间在iOS上显示,但很难让它真正提交表单

更新超时

$("#register").validate({
  errorPlacement: function(error, element) { },
  submitHandler: function(form) {
    $('.processing-wrapper').removeClass('hidden');
    setTimeout(function(form) {
      form.submit();
    }, 2500);
  }
});

通过这次更新,我确实看到了"订单处理"元素,但也得到了错误"TypeError:无法读取未定义的属性‘submit’"

回顾:

  • 知道为什么"订单处理"元素没有出现在iOS上吗
  • 关于让setTimeout真正工作,有什么建议吗

如果能为我指明正确的方向,我们将不胜感激

timeout方法是正确的修复方法,但您会收到错误,因为您已将匿名函数设置为接受一个form参数,该参数位于外部作用域的form之上,并且为null,因此会出现错误。只需删除该参数,它就会正常工作:

$("#register").validate({
    errorPlacement: function(error, element) { },
    submitHandler: function(form) {
        $('.processing-wrapper').removeClass('hidden');
        setTimeout(function() { // no parameter here
            form.submit();
        }, 50);
    }
});

请注意,定时器延迟可以短得多,在我的例子中,我将其减少到了50ms。您所需要做的就是确保在提交之前调用删除类,这样UI就有机会更新。

最新更新