HTML ファイル入力を使用してユーザーがファイル入力をキャンセルしたことをどのように検出できますか?
onChange を使用すると、ユーザーがファイルを選択したことを検出できますが、ユーザーがキャンセルしたとき (何も選択せずにファイル選択ダイアログを閉じたとき) も把握したいと考えています。
ベストアンサー1
直接的な解決策ではなく、また(私がテストした限りでは)onfocus でのみ機能する(かなり制限されたイベント ブロックを必要とする)という点でも不便ですが、次のようにして実現できます。
document.body.onfocus = function(){ /*rock it*/ }
これのいいところは、ファイル イベントに合わせてアタッチ/デタッチできることと、非表示の入力でも問題なく機能する点です (既定の入力タイプが「ファイル」という安っぽいものに対して視覚的な回避策を使用している場合は、間違いなく有利です)。その後は、入力値が変更されたかどうかを確認するだけです。
例:
var godzilla = document.getElementById('godzilla')
godzilla.onclick = charge
function charge()
{
document.body.onfocus = roar
console.log('chargin')
}
function roar()
{
if(godzilla.value.length) alert('ROAR! FILES!')
else alert('*empty wheeze*')
document.body.onfocus = null
console.log('depleted')
}
実際に動作を見てみましょう:http://jsfiddle.net/Shiboe/yuK3r/6/
残念ながら、これはWebKitブラウザでしか動作しないようです。Firefox/IEの解決策を誰か他に見つけられるかもしれません。