【问题标题】:Javascript form input to csv fileJavascript 表单输入到 csv 文件
【发布时间】:2016-08-07 17:59:35
【问题描述】:

我有以下代码,请参阅 codepen http://codepen.io/Jacqueline34/pen/GZxxRV 我认为在第 25 行我的代码是问题,但我可以看到如何纠正(菜鸟警报!)。我可以在 localstorage 中正确存储表单输入,但是当我打开 excel 文件时,文件显示 [object][object] 等。如何修改我的代码以在 excel 文件中输出 localstorage 数据?这让我头疼。 :)

$("#save").click(function(e) {                          
    e.preventDefault();                                 
    localStorage.setItem("user_input", "set");          
    var data = $("#contact-form").serializeArray();     
        $.each(data, function(i, obj) {                  
            localStorage.setItem(obj.name, obj.value);  
        });
        $("#message").html("<p style='color:red'><strong>Thank you.  Your information has been saved</strong></p><br/>"); 
});

    if (localStorage.getItem("user_input") == "set") {          
    var data = $("#contact-form").serializeArray();              
        $.each(data, function(i, obj) {
            $("[name='" + obj.name + "']").val(localStorage.getItem(obj.name));  
        });             
    }

    $(function exportData() {
    var data = $("#contact-form").serializeArray();                         
        $.each(data, function(i, obj) {
        data += $("[name='" + i + "']") + "," + $("[name='" + obj.name + "']").val();
        }); 
        data += '\r\n';                                                     

        var exportLink = document.createElement('a');                                   
        exportLink.setAttribute('href', 'data:text/csv;base64,' + window.btoa(data));  
        exportLink.appendChild(document.createTextNode('data.csv'));                    
        document.getElementById('results').appendChild(exportLink);                     
}); 

【问题讨论】:

    标签: javascript json html csv local-storage


    【解决方案1】:

    看起来你写的是对象而不是对象的内容。

    我稍微修改了你的 html 并制作了一个按钮:

    <button id="next" type="button" class="btn btn-default" onclick="exportData()">Export</button>
    

    我删除了原来的

    $(function exportData() { }
    

    从您的代码中并在 范围之外放置一个新的:

    $(document).ready(function () { }
    

    我这样修改了导出函数:

    function exportData() {
    
        var data = $("#contact-form").serializeArray();
        var out = '';    
    
        for (var i = 0; i < data.length; i++) {
            out += data[i].name + "," + data[i].value;
            out += '\r\n';
        }
    
        var blob = new Blob([out], { type: 'text/csv;charset=utf-8;'});
        if (navigator.msSaveBlob) {
            navigator.msSaveBlob(blob, 'export.csv');
        } else {
            var link = document.createElement("a");
            if (link.download !== undefined) { // feature detection
                var url = URL.createObjectURL(blob);
                link.setAttribute("href", url);
                link.setAttribute("download", 'export.csv');
                link.style.visibility = 'hidden';
                document.body.appendChild(link);
                link.click();
            }
        }    
    }
    

    所以这个函数现在独立了。 希望对你有帮助...

    【讨论】:

    • vaultboy - 我欣喜若狂,它现在可以工作了。感谢您花时间回答我的问题。是的,我正在下载对象,但我看不到过去的路。 :)
    猜你喜欢
    • 2015-11-22
    • 1970-01-01
    • 2018-11-03
    • 2015-03-15
    • 2023-04-01
    • 2013-03-23
    • 1970-01-01
    • 2014-08-28
    • 1970-01-01
    相关资源
    最近更新 更多