Dart:在IE11中提交表单时,preventDefault()无法在异步回调中工作

时间:2016-11-23 20:53:36

标签: internet-explorer dart dart-html

我在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,都可以使用。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

我在GitHub上的dart-lang / sdk repo上创建了一个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();
  });
}