2016-11-23 5 views
2

IE11でフォームを送信するときにEvent.preventDefault()に問題があります。何らかの理由で、asyncコールバックを使用しているときにブラウザがリフレッシュするのを妨げません。ダーツ:IE11でフォームを送信するときに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

関連する問題