1

私は明らかなものを使用しています:

    /*Place the file into the editing image */
    $j("#file").change(function(e) {
            type="upload";
            submitChanges("preview");
    });

submitChanges 関数は基本的に、送信 (非表示) をクリックしてフォームを送信します。フォームは AJAX フォーム プラグインで監視されます。提出物は正常に機能しており、問題とは無関係ですが、背景を説明するためにここにいます.

Firefox と IE8 ではすべて正常に動作します。ユーザーがファイルを選択すると、AJAX が実行します。ユーザーは [参照] をもう一度クリックして、新しいファイルまたは同じファイルを選択すると、変更が再度実行されます。

この問題は、Webkit ベースのブラウザー (Chrome および Safari) で、ユーザーが以前に選択したファイルとは異なるファイルを選択した場合にのみ変更イベントが発生します。これらのブラウザは変更を文字通りに解釈します。同じファイルが選択されたためにボックスが変更されなかったため、イベントは発生していません。どのファイルが選択されてもこのイベントが発生するという点で、IE と Firefox の機能を模倣したいと思います。

解決策はありますか?

要求された HTML:

 <table border="0" style="width:100%">
                    <tbody>
                            <tr>
                                    <td style="width:50%"><input id="preview" type="button" value="Preview"/></td>
                                    <td><input type="button" id="save" value="Save" /></td>
                            </tr>
                            <tr>
                                    <td style="width:50%">Upload (JPEG Only):</td>
                                    <td><form id="uploadForm" class="upload" method="POST" enctype="multipart/form-data" action="/path/to/file.php?action=preview"><input type="file" name="file" id="file" /><input type="submit" id="uploadSubmit" style="display:none" /><div id="hiddenFields"><!-- JQUERY --></div></form></td>
                            </tr>
                    </tbody>
            </table>
4

1 に答える 1

2

これはちょっとしたハックであることはわかっていますが、一時的な解決策になる可能性があります。

ユーザーが同じファイルを選択した場合でも変更イベントをトリガーするには、必要なすべてを実行した後にフィールドを消去します。

$("#file").on('change', function(e) {
    type = "upload"
    submitChanges("preview")
    $(this).val('')
})

ここで動作することを確認してください:http://jsfiddle.net/RASG/2rrqv/

Chrome 21 および FF 15 でテスト済み。

IE の場合、別の「ハック」があります:なぜ IE はファイル入力フィールドをリセットしないのですか?

于 2012-10-11T13:19:49.860 に答える