使用 blueimp 文件上传完成后设置隐藏字段的值

Set value of hidden field AFTER file upload completes using blueimp File Upload

本文关键字:隐藏 设置 字段 文件 blueimp 使用      更新时间:2023-09-26

我有以下代码,可以上传并显示上传的文件的警报,绝对正常。但是,当我将文件名保存到我的服务器时,我会向文件名添加内容,因此 id 就像 jquery 中的 done 函数一样,使用保存的文件名更新隐藏字段的值。我以为这很简单,但事实并非如此。让我向您展示我正在使用的代码:

上传每个附加项目表单的文件的功能。这应该工作:

function bindFileUpload() {
    $('.fileupload').fileupload({
        dataType: 'json',
        done: function (e, data) {
            $.each(data.result.files, function (index, file) {
                alert(file.name);
            });
        }
    });
};

我用来附加更多项目表单的代码如下。同样,这与上述功能结合使用时效果很好。我要设置值的输入是.itemPhotoFile

$(document).on('click','.addItem', function(){
    $('<!--ROW START-->'
        <form class="widget-content item">'
            <div class="row">'
                <div class="col-md-3"><input type="text" class="form-control" name="itemName[]"></div>'
                <div class="col-md-3"><textarea class="auto form-control" name="itemDescription[]" cols="20" rows="1" style="word-wrap: break-word; resize: vertical;"></textarea></div>'
                <div class="col-md-3"><textarea class="auto form-control" name="itemCondition[]" cols="20" rows="1" style="word-wrap: break-word; resize: vertical;"></textarea></div>'
                <input type="hidden" class="itemId" name="itemId[]" value="">'
                <input type="hidden" class="itemPhotoFile" name="itemPhoto[]" value="">'
                <input type="hidden" name="itemInventoryId[]" value="<?=$_GET["inventory_id"]?>">'
                <input type="hidden" name="itemParent[]" value="'+$(this).closest('.formHolder').data('parent-room')+'">'
                <div class="col-md-2">'
                    <div class="fileinput-holder input-group" data-item-id="">'
                        <!-- <div class="uploadPhotoBox">Upload Photo</div> -->'
                        <input class="fileupload" type="file" name="files[]" data-url="uploads/">'
                    </div>'
                </div>'
                <div class="col-md-1 align-center"><i class="save icon-ok large"> </i>&nbsp;&nbsp;&nbsp;<i class="delete icon-trash large"> </i></div>'
            </div>'
        </form>'
    <!--/ROW END-->').fadeIn(500).appendTo($(this).parents().siblings('.items')).each(function(){
        bindFileUpload();
    });
    $(this).parents().siblings('.widget-header, .header-margin, .hide').removeClass('hide').fadeIn();
});

我尝试过以下想法:

function bindFileUpload() {
    $('.fileupload').fileupload({
        dataType: 'json',
        done: function (e, data) {
            $.each(data.result.files, function (index, file) {
                alert(file.name);
                $(this).closest('.itemPhotoFile').val(file.name);
            });
        }
    });
};

但是没有运气,我认为它不知道$(this)正确是什么,也找不到输入。上传前我找不到输入字段的值,因为这不是最终文件名。因此,在上传成功后,它必须工作。

谢谢!

您需要从数据参数中传递的"表单"中进行搜索:

function bindFileUpload() {
    $('.fileupload').fileupload({
        dataType: 'json',
        done: function (e, data) {
            $.each(data.result.files, function (index, file) {
                alert(file.name);
                data.form.find('.itemPhotoFile').val(file.name);
            });
        }
    });
};

$.each() 中,this 是迭代的当前元素。但即使不是,我认为文件上传插件也不会将this .done回调绑定到原始元素。所以我认为你需要用循环明确地做到这一点:

function bindFileUpload() {
    $('.fileupload').each(function() {
        var $that = $(this);
        $that.fileupload({
            dataType: 'json',
            done: function (e, data) {
                $.each(data.result.files, function (index, file) {
                    alert(file.name);
                    $that.closest('.itemPhotoFile').val(file.name);
                });
            }
        });
    });
};