次のように解決してみてください。
ユーザーがファイル選択入力をクリックしたら、フォーカスを与えます$(el).focus()
。
次に、ユーザーがESCを押すたびに、$(':focus')要素がファイル選択入力であるかどうかを確認します。その場合、その入力をblur()し、モーダルを閉じません。最悪の場合–ユーザーがモーダルを閉じたいと思ってESCを押しても、何も起こりません[1]。「wtf」を考え、ESCをもう一度押すと、モーダルが適切に閉じます。ファイル選択入力がすべての可能な場合(入力のタブ移動など)でフォーカスされることを確認してください。サードパーティのアップローダーを使用していて、私が言ったことが機能しない場合は、そのアップローダーがファイル選択をどのようにラップするかを調べてください。カスタムリンクまたはボタン、およびさまざまな場合に実際にクリックイベントを受信するもの(たとえば、タブを押すと入力がイベントを受信する場合があり、クリックするとリンクである可能性があります)。全体として、これを私が説明した警告で機能させることは管理可能です。
これは、展開された-sでも同様に機能します(ESCがヒットしたときに選択がフォーカスされていないことを確認してください)。
blur()
ファイル選択入力が必要な場合、すべてのケースを検出することはできません。クロスブラウザソリューションではありません。FFでさえ機能するために調整が必要です。私はWebkitでテストを行ってきましたが、他のブラウザーでは機能しない可能性があります。