【问题标题】:Dart: preventDefault() not working in asynchronous callback when submitting form in IE11Dart:在 IE11 中提交表单时,preventDefault() 在异步回调中不起作用
【发布时间】:2016-11-23 20:53:36
【问题描述】:

在 IE11 中提交表单时,我遇到了 Event.preventDefault() 的问题。出于某种原因,它不会阻止浏览器在使用async 回调时刷新。

HTML:

<form id="login">
  <input type="email" id="email" placeholder="Email">
  <input type="password" id="password" placeholder="Password">
  <input type="submit" value="SUBMIT">
</form>

飞镖:

void main() {
  FormElement form = querySelector('form#login');
  form.onSubmit.listen((Event e) async {
    e.preventDefault();
    // send login request
  });
}

如果我删除了async 关键字,它确实会阻止浏览器刷新。我在这里错过了什么吗,我没想到它会这样?在 Chrome 中,无论是否使用 async,它都可以使用。

【问题讨论】:

    标签: internet-explorer dart dart-html


    【解决方案1】:

    这看起来像一个错误。请在此处提交https://github.com/dart-lang/sdk/issues/new,我们会看看。

    【讨论】:

    • Created。谢谢你的帮助。确认错误后将立即接受。
    【解决方案2】:

    我在 GitHub 上的 dart-lang/sdk 存储库上创建了一个 issue,似乎 IE11 执行异步回调有点太晚了,e.preventDefault() 无法生效。所以我将表单提交的所有回调都更改为同步,以便立即执行。

    在某些情况下,到处都是.then(),看起来相当混乱,所以我改为在内部定义了一个异步函数,以便可以使用await

    飞镖:

    void main() {
      FormElement form = querySelector('form#login');
      form.onSubmit.listen((Event e) {
        e.preventDefault();
        _asyncWrap() async {
          // send login request
        }
        _asyncWrap();
      });
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-02
      • 1970-01-01
      相关资源
      最近更新 更多