0

从阅读 Stack and the web 我收集到,出于安全原因,您无法预填充此选项。但是,我有许多用户需要填写的页面表单。通过将其他变量保留为会话变量,我可以让页面记住它们以前的条目并在回调该页面时重新显示它们、文本框、按钮等。我没有不知道如何对文件名输入表单组件做同样的事情。如果有解决方法有什么想法吗?

4

1 回答 1

3

如果图像已经上传,您将需要在逻辑服务器端显示上传图像的缩略图,并提供上传新图像的选项,此时您将显示一个空文件输入。就像是...

if(sessioncontains("uploaded")) {
    out << "<img src=\"" + (sessionget("uploaded")->thumb) + "\"/>";
    out << "<label>Upload a new image</label>";
} else {
    out << "<label>Upload an image</label>";
}
out << "<input type=\"file\"/>";

编辑以便您希望在提交之前保存字段的值,您可以将它们发布到幕后的服务器。如何异步上传文件?. 或者您可以将它们序列化为window.localStorage数据 URL(注意存储限制)。

Javascript...

function retrieveFiles() {
    var files = [];
    var json = window.localStorage.getItem("files");
    if(json.length) {
        try {
            files = JSON.parse(json);
        } catch(ex) {
            console.err("There was an error", files, window.localStorage);
        }
    }
    return files;
}

function storeFiles(files) {
    window.localStorage.setItem("files", JSON.stringify(files));
}

$(function() {

    var arr = retrieveFiles();

    $("#file").on("change", function() {
        var files = $(this).prop("files");
        var reader = new FileReader();
        reader.onload = function(e) {
            arr.push(e.target.result);
            storeFiles(arr);
        }
        for(var i = 0; i < files.length; ++i) {
            reader.readAsDataURL(files[i]);
        }
    });

    $("form").on("submit", function() {
        // Post files array arr by AJAX
    });

});

HTML...

<form action="upload" method="post" enctype="multipart/form-data">
    <input type="file" id="file" multiple/>
    <button type="submit">Submit</button>
</form>
于 2012-10-16T11:40:34.240 回答