0

2 番目の画像の2 倍のサイズの画像を選択したのに、なぜ表示されないのですか?

私の完全なコード: http://jsfiddle.net/ayxZM/

<script type="text/javascript">
    function handleFiles(files) {
        for (var i = 0; i < files.length; i++)
        {
            alert(files[i].size + " Bytes");
        }
    }
</script>
<input type="file" onchange="handleFiles(this.files)">​
4

4 に答える 4

1

同じ画像を 2 回選択した場合、画像の選択は実際には変更されていないため、onchangeハンドラーは起動されません。別の画像を選択すると、そのサイズが表示されます。

于 2012-11-18T20:50:39.803 に答える
0

同じ画像を2回目にクリックしてもファイルの変更がないため、onchangeイベントがトリガーhandleFilesされないため、関数が呼び出されず、サイズが表示されません。この場合は別のイベントを使用してください。関数内の入力ファイルをリセットできるかもしれませんhandleFiles。そうすれば、ユーザーが同じ画像を再度選択した場合でも、それは新しい画像と見なされるため、onchangeイベントがトリガーされます。

于 2012-11-18T20:55:52.650 に答える
0

このようにフィールドをリセットします。私はそれをテストしました。それは完全に機能します。

            <script type="text/javascript">

                function handleFiles(files) {
                    for (var i = 0; i < files.length; i++)
                    {
                       alert(files[i].size + ' Bytes' );
                       reset_field('handleFilesfield');
                }
                }

                function reset_field(id) {
                $('#'+id).html($('#'+id).html());
                }

            </script>
            ​&lt;form>
                <span id="handleFilesfield"><input type="file" onchange="handleFiles(this.files)"/></span>
            </form>
于 2012-11-18T22:16:50.243 に答える
0

ここですでに述べたようにonchange、同じ画像を選択しても起動しません (= 値を変更しないでください – わかりますか?それは理にかなっています)。ただし、毎回発火したい場合は、イベントonchangeで値をリセットしてみてください。onmousedownそうすれば、値は提出のために残り、強制的onchangeに発射されます。デモ: http://jsfiddle.net/LeZuse/ayxZM/27/
注: タッチ対応が必要な場合は、ontouchstartこちらも使用できます。

于 2012-11-19T00:09:10.823 に答える