2016-11-23 53 views
2

在IE11中提交表單時遇到問題Event.preventDefault()。出於某種原因,它不會阻止瀏覽器在使用async回調時刷新。當在IE11中提交表單時Dart:preventDefault()在異步回調中不起作用

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

回答

1

我在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(); 
    }); 
} 
1

這看起來像一個錯誤。請在這裏提交https://github.com/dart-lang/sdk/issues/new,我們來看看。

+0

[創建](https://github.com/dart-lang/sdk/issues/27884)。謝謝你的幫助。只要它是一個確認的錯誤,它會立即接受。 – stevenupton