我在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
,都可以使用。
答案 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();
});
}