2017-08-16 13 views
7

iPhoneがあり、隠し入力にchangeイベントをキャッチする必要があります。 PCで開くと、それは動作します、私はchangedテキストを参照してください。私がiPhone上でそれを開く場合、それは期待どおりに動作しません、私はちょうどopen dialogを参照してください。iPhoneのSafariトリガーが入力タイプ=ファイルでイベントを変更しないのはなぜですか?

簡易jsfiddle demonstrates this

<input type=file style="display:none" id=file> 
<button type=button id=but>open</button> 

<div id=out> 
</div> 

そして、それと間違って何

$(document).ready(function(){ 
    $('#but').on('click touchend', function(){ 
    $('#out').text('open dialog'); 
    $('#file').click(); 
    }); 
    $('#file').on('change', function(evt) { 
    $('#out').text('changed'); 
    }); 
}); 

?それはiOの新しいバグですか? Afaik、それはちょうど1ヶ月前に働いた。

hiddenopacity:0に置き換えようとしましたが、単純なjsfiddleで動作しますが、サイドバーを隠している複雑なプロジェクトでは機能しません。問題は次のとおりです。シンプルな修正方法と、最近変更されたもの(Safariのアップデートの一部)は、隠れた入力動作の変化を引き起こしましたか?

+0

表示を削除してください:なしCSSのスタイリングを、それが不透明度を試す動作するかどうか:0ではなく、CSSが多分作用を防止する(私は過去にこれが問題だったと思います) –

+0

フム。このトリックは、iPhone5SでSafariとChromeで動作します。バイトは何ですか? –

+0

あなたはIphoneブラウザやアンドロイドのwebviewのようなものでこれを実行していますか?あなたが理解しているのであれば、人々はファイルをアップロードすることができますか?しかし、それはファイルマネージャーを開かないということは起こりませんか?私は正しいですか、それとも間違っているのですか? – Steven

答えて

2

forのプロパティはlabelです。 次のコードは、あなたのために役立つことがあります。

labelを使用して

$('#file').on('change', function() { 
 
    $('.button').text('changed') 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input type='file' style='display:none' id='file'> 
 
<label for='file' class='button'>open</label>

ファイルをアップロードするとき、あなたは、いくつかのモバイルブラウザでは、しかし、あなたのアップロードボタン

のためのカスタムスタイルを使用することができます再び、ファイルが以前と同じ場合、それはchangeイベントをトリガーしませんresetメソッドのformを使用してファイルをクリア:

$('#file').on('change', function() { 
 
     $('.form')[0].reset() 
 
     $('.button').text('changed') 
 
    })
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<form class='form'> 
 
    <input type='file' style='display:none' id='file'> 
 
    <label for='file' class='button'>open</label> 
 
</form>

関連する問題