2

如果有人尝试上传具有不允许的文件扩展名的文件,则此输入文件元素应“重置”。

那是输入文件元素

<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

您将本机 DOM 元素传递给您的函数,而不是包含该元素的 jQuery 对象。原生 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 回答