2

許可されていないファイル拡張子を持つファイルを誰かがアップロードしようとすると、この input-file-element が「リセット」されます。

それがinput-file-elementです

<input type="file" id="image1">

これらは対応する jQuery ステートメント (ドキュメントの準備ができている) であり、「TypeError: myElement.clone is not a function」が表示されます (ここでこのソリューションを試している間: Clearing <input type='file' /> using jQuery )

$(document).ready(function() {
    $('#image1').change(function(event) {
        checkExtensions(this.files[0].name, $(this).get());
    });

    function checkExtensions (fileName, element) {

        var myElement = element;
        var allowedExtensions = new Array ('pdf','gif','jpg','png');
        var currentExtension = fileName.split('.').pop();

        if ($.inArray (currentExtension, allowedExtensions) > -1) {
            // everythins is OK, further instructions take place
        }   else {
            // reset the file input element
            myElement.replaceWith( myElement = myElement.clone( true ) );
        }
    }
});
4

1 に答える 1

1

要素を含む jQuery オブジェクトではなく、ネイティブ DOM 要素を関数に渡しています。ネイティブ DOM 要素には機能がありませんclone()(またはreplaceWithどちらもありません)。代わりにこれを試してください:

$('#image1').change(function(event) {
    checkExtensions(this.files[0].name, $(this)); // note, I removed .get()
});

function checkExtensions (fileName, $element) {
    var allowedExtensions = new Array ('pdf','gif','jpg','png');
    var currentExtension = fileName.split('.').pop();

    if ($.inArray (currentExtension, allowedExtensions) > -1) {
        // everything is OK, further instructions take place
    }   else {
        // reset the file input element        
        $element.replaceWith($element.clone(true).val(''));
    }
}

フィドルの例

于 2013-10-24T09:00:51.763 に答える