简体   繁体   English

如何对用户以 html 形式输入的数据应用字符串化?

[英]How can i apply stringify on the data which has been input by the user in an html form?

I have built an app using html,js and css.我已经使用 html、js 和 css 构建了一个应用程序。 The output of the web app is a text or yaml file. Web 应用程序的输出是文本或 yaml 文件。 I am inputing the data and trying to gather in a yaml file.我正在输入数据并尝试收集 yaml 文件。 The code is given below:- For instance, I want the 'PDU' data in the downloaded file to be like this代码如下:-例如,我希望下载文件中的“PDU”数据是这样的

PDU: PDU_IP: 10.235.250.49 (this is just a sample IP) PDU:PDU_IP:10.235.250.49(这只是一个示例IP)

While I am trying to do this, its showing [object Object].当我尝试这样做时,它显示 [object Object]。 I tried to use stringify to convert object to string but failed in realizing the following funcionality.我尝试使用 stringify 将对象转换为字符串,但未能实现以下功能。 can anyone please help me in formatting the downloaded data.任何人都可以帮我格式化下载的数据。 Basically i want the data to be in the format as it is there in a YAML file.基本上我希望数据采用 YAML 文件中的格式。

 document.addEventListener('DOMContentLoaded', function() { const extra = {}; const oForm = document.forms.myForm; const oSave = document.querySelector('input[name="save"]'); const oSub = document.querySelector('input[name="submit"]'); const oCtrl = document.querySelector('select[name="controller"]'); const oTest = document.querySelector('select[name="test"]'); const oProto = document.querySelector('select[name="protocol"]'); const oTmp = document.querySelector('template'); const changehandler = function(e) { let option = this.options[this.options.selectedIndex]; if (option.hasAttribute('data-extra')) extra[this.name] = this.value; else { if (extra.hasOwnProperty(this.name)) delete extra[this.name]; } if (Object.keys(extra).length == 2) { let fieldset = oTmp.content.cloneNode(true); oForm.insertBefore(fieldset, oProto.parentNode.nextSibling) } else { if (document.getElementById('extra')) { fieldset = document.getElementById('extra') fieldset.parentNode.removeChild(fieldset); } } if (option.hasAttribute('data-extra')) extra[this.name] = this.value; else { if (extra.hasOwnProperty(this.name)) delete extra[this.name]; } if (this.name == 'controller') { if (this.value == 'RAID') oProto.disabled = false else oProto.disabled = true } } const dialog = function(msg) { alert(msg); return false; } const savehandler = function(e) { e.preventDefault(); let valid = true; /*[ 'name','email','test','controller','ip','chassis' ].forEach( n => { oForm[ n ].classList.remove('invalid'); if( oForm[ n ].value=='' ){ oForm[ n ].classList.add('invalid'); valid=false; } });*/ if (!valid) return dialog('Please fill all the fields!'); const ipformat = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/; if (ipformat.test(oForm.ip.value) == false) { return dialog('Invalid IP Address'); } let data = { "PDU": { "PDU TEST": oForm.test.value, "PDU_IP": oForm.ip.value }, 'Product Type': oForm.controller.value, 'Protocol Type': oForm.protocol.value, 'Chasis Inputs': oForm.chassis.value }; var datastr = JSON.stringify(data); if (Object.keys(extra).length == 2) { data[' - #Controller_ID_A'] = oForm['Controller-ID1'].value; data[' HBA_Ports_A'] = [oForm['hba-ports1'].value]; data[' MC_IP_A'] = oForm['extra-ip1'].value; data[' MC_Netmask_A'] = oForm['netmask-ip1'].value; data[' MC_Gateway_A'] = oForm['gateway-ip1'].value; data[' MC_A'] = oForm['rbod-mc1'].value; data[' SC_A'] = oForm['rbod-sc1'].value; data[' FU_A'] = oForm['rbod-fu1'].value; data[' EC_A'] = oForm['rbod-ec1'].value; } if (Object.keys(extra).length == 2) { data[' - #Controller_ID'] = oForm['Controller-ID'].value; data[' HBA_Ports'] = [oForm['hba-ports'].value]; data[' MC_IP'] = oForm['extra-ip'].value; data[' MC_Netmask'] = oForm['netmask-ip'].value; data[' MC_Gateway'] = oForm['gateway-ip'].value; data[' MC'] = oForm['rbod-mc'].value; data[' SC'] = oForm['rbod-sc'].value; data[' FU'] = oForm['rbod-fu'].value; data[' EC'] = oForm['rbod-ec'].value; } let payload = Object.keys(data).map(key => { return [key, data[key]].join(': ') }).join(String.fromCharCode(10)); const blob = new Blob([payload], { type: 'text/plain' }); const file = 'formData.yaml'; let link = document.createElement('a'); link.download = file; if (window.webkitURL != null) { link.href = window.webkitURL.createObjectURL(blob); } else { link.href = window.URL.createObjectURL(blob); link.style.display = "none"; document.body.appendChild(link); } link.click(); } oCtrl.addEventListener('change', changehandler); oTest.addEventListener('change', changehandler); oSave.addEventListener('click', savehandler); })
 <!DOCTYPE html> <html> <head> <title>Save form Data in a Text File using JavaScript</title> <h1>User Information </h1> <style> html, html * { box-sizing: border-box; border-color: teal; font-family: calibri; } html { background: radial-gradient(rgba(48, 97, 97, 0.5), rgba(255, 255, 255, 0.5)) } input[type=button], input[type=submit] { padding: 1rem; } input[type=text], textarea, select { font: 17px Calibri; width: 100%; padding: 12px; border: 1px solid rgb(19, 18, 18); border-radius: 4px; color: teal } fieldset { border: none; padding: 10px; overflow: hidden; color: rgb(16, 8, 32); font-size: 25px; font-style: initial; font-family: 'Times New Roman', Times, serif; } #extra { border: 2px solid black; background: whitesmoke; border-radius: 1rem; box-shadow: 0 0 5px black; width: calc(100% - 24px); margin: auto; float: none; clear: both; text-indent: 50px; } #extra h6 { margin: 0 } #extra style .invalid { border: 2px solid red!important; background: rgba(255, 0, 0, 0.1) } </style> <script src="script.js"></script> </head> <body> <template> <fieldset id='extra'> <h6>Additional Details Required</h6> <label for='Controller_ID_A'>Controller_ID:</label> <select name='Controller-ID1' required> <option value=""> - Select the Controller ID - </option> <option value='A'>A </select> <label for='HBA_Ports_A'>HBA_Ports:</label><input type='text' name='hba-ports1' placeholder='Enter the HBA Ports' /> <label for='MC_IP_A'>MC_IP:</label><input type='text' name='extra-ip1' placeholder='Enter the MC_IP' /> <label for='MC_Netmask_A'>MC_Netmask:</label><input type='text' name='netmask-ip1' placeholder='Enter the MC_Netmask' /> <label for='MC_Gateway_A'>MC_Gateway:</label><input type='text' name='gateway-ip1' placeholder='Enter the MC_Gateway' /> <label for='MC_A'>MC:</label><input type='text' name='rbod-mc1' placeholder='Enter the MC Port' /> <label for='SC_A'>SC:</label><input type='text' name='rbod-sc1' placeholder='Enter the SC Port' /> <label for='FU_A'>FU:</label><input type='text' name='rbod-fu1' placeholder='Enter the FU Port' /> <label for='EC_A'>EC:</label><input type='text' name='rbod-ec1' placeholder='Enter the EC Port' /> <label for='Controller_ID'>Controller_ID:</label> <select name='Controller-ID' required> <option value=""> - Select the Controller ID - </option> <option value='B'>B </select> <label for='HBA_Ports'>HBA_Ports:</label><input type='text' name='hba-ports' placeholder='Enter the HBA Ports' /> <label for='MC_IP'>MC_IP:</label><input type='text' name='extra-ip' placeholder='Enter the MC_IP' /> <label for='MC_Netmask'>MC_Netmask:</label><input type='text' name='netmask-ip' placeholder='Enter the MC_Netmask' /> <label for='MC_Gateway'>MC_Gateway:</label><input type='text' name='gateway-ip' placeholder='Enter the MC_Gateway' /> <label for='MC'>MC:</label><input type='text' name='rbod-mc' placeholder='Enter the MC Port' /> <label for='SC'>SC:</label><input type='text' name='rbod-sc' placeholder='Enter the SC Port' /> <label for='FU'>FU:</label><input type='text' name='rbod-fu' placeholder='Enter the FU Port' /> <label for='EC'>EC:</label><input type='text' name='rbod-ec' placeholder='Enter the EC Port' /> </fieldset> </template> <form name='myForm' method='POST'> <fieldset> <label for='Controller Type'>Controller Type</label> <select name='controller' required> <option value=""> - Select the Controller - </option> <option data-extra=true value='RAID'>RAID <option data-extra=true value='JBOD'>JBOD <option data-extra=true value='AP'>AP </select> </fieldset> <fieldset> <label for='Test Type'>Test Type</label> <select name='test' required> <option value=""> - Select The Test - </option> <option data-extra=true value='BFT'>BFT <option data-extra=true value='CTO'>CTO <option data-extra=true value='RAID Generic'>RAID Generic <option data-extra=true value='Port Check'>Port Check <option data-extra=true value='FW Generic'>FW Generic <option data-extra=true value='JBOD Generic'>JBOD Generic </select> </fieldset> <!-- insert templated additional details here --> <fieldset> <label for='Protocol Type'>Protocol Type</label> <select name='protocol' required> <option value=""> - Select The Protocol - <option data-extra=true value='SAS'>SAS <option data-extra=true value='iSCSI'>iSCSI <option data-extra=true value='FC'>FC </select> </fieldset> <fieldset> <label for='IP Address'>IP Address:</label> <input type='text' name='ip' placeholder='Enter your IP address' required /> </fieldset> <fieldset> <label for='Chasis Input'>Number of Chasis Input:</label> <input type='number' name='chassis' placeholder='Enter Number of Chasis' required /> </fieldset> <fieldset> <input type='button' name='save' value='Save data to file' /> </fieldset> </form> </body> </html>

Take a look at this snippet.看看这个片段。 It's mostly your code, but I changed the part where you create the payload .这主要是您的代码,但我更改了您创建payload的部分。

I marked my changes with MY CHANGE BEGINS HERE and MY CHANGE ENDS HERE comments.我用MY CHANGE BEGINS HEREMY CHANGE ENDS HERE注释标记了我的更改。

It adds spaces dynamically, so the format looks like this:它动态添加空格,因此格式如下所示:

PDU:
  PDU TEST: BFT
  PDU_IP: 185.237.96.51
Product Type: 
Protocol Type: iSCSI
Chasis Inputs: 

However, it does not work with the rest of your fields, but maybe you can use it to replace your hacky whitespacing by creating plain objects and adding them to your data .但是,它不适用于您的其余字段,但也许您可以通过创建普通对象并将它们添加到您的data来使用它来替换您的hacky whitespacing。

 document.addEventListener('DOMContentLoaded', function() { const extra = {}; const oForm = document.forms.myForm; const oSave = document.querySelector('input[name="save"]'); const oSub = document.querySelector('input[name="submit"]'); const oCtrl = document.querySelector('select[name="controller"]'); const oTest = document.querySelector('select[name="test"]'); const oProto = document.querySelector('select[name="protocol"]'); const oTmp = document.querySelector('template'); const changehandler = function(e) { let option = this.options[this.options.selectedIndex]; if (option.hasAttribute('data-extra')) extra[this.name] = this.value; else { if (extra.hasOwnProperty(this.name)) delete extra[this.name]; } if (Object.keys(extra).length == 2) { let fieldset = oTmp.content.cloneNode(true); oForm.insertBefore(fieldset, oProto.parentNode.nextSibling) } else { if (document.getElementById('extra')) { fieldset = document.getElementById('extra') fieldset.parentNode.removeChild(fieldset); } } if (option.hasAttribute('data-extra')) extra[this.name] = this.value; else { if (extra.hasOwnProperty(this.name)) delete extra[this.name]; } if (this.name == 'controller') { if (this.value == 'RAID') oProto.disabled = false else oProto.disabled = true } } const dialog = function(msg) { alert(msg); return false; } const savehandler = function(e) { e.preventDefault(); let valid = true; /*[ 'name','email','test','controller','ip','chassis' ].forEach( n => { oForm[ n ].classList.remove('invalid'); if( oForm[ n ].value=='' ){ oForm[ n ].classList.add('invalid'); valid=false; } });*/ if (!valid) return dialog('Please fill all the fields!'); const ipformat = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/; if (ipformat.test(oForm.ip.value) == false) { return dialog('Invalid IP Address'); } let data = { "PDU": { "PDU TEST": oForm.test.value, "PDU_IP": oForm.ip.value }, 'Product Type': oForm.controller.value, 'Protocol Type': oForm.protocol.value, 'Chasis Inputs': oForm.chassis.value }; var datastr = JSON.stringify(data); if (Object.keys(extra).length == 2) { data[' - #Controller_ID_A'] = oForm['Controller-ID1'].value; data[' HBA_Ports_A'] = [oForm['hba-ports1'].value]; data[' MC_IP_A'] = oForm['extra-ip1'].value; data[' MC_Netmask_A'] = oForm['netmask-ip1'].value; data[' MC_Gateway_A'] = oForm['gateway-ip1'].value; data[' MC_A'] = oForm['rbod-mc1'].value; data[' SC_A'] = oForm['rbod-sc1'].value; data[' FU_A'] = oForm['rbod-fu1'].value; data[' EC_A'] = oForm['rbod-ec1'].value; } if (Object.keys(extra).length == 2) { data[' - #Controller_ID'] = oForm['Controller-ID'].value; data[' HBA_Ports'] = [oForm['hba-ports'].value]; data[' MC_IP'] = oForm['extra-ip'].value; data[' MC_Netmask'] = oForm['netmask-ip'].value; data[' MC_Gateway'] = oForm['gateway-ip'].value; data[' MC'] = oForm['rbod-mc'].value; data[' SC'] = oForm['rbod-sc'].value; data[' FU'] = oForm['rbod-fu'].value; data[' EC'] = oForm['rbod-ec'].value; } // MY CHANGE BEGINS HERE <------- let payload = ''; const addToPayload = (object, whitespace) => { for (const key of Object.keys(object)) { payload += whitespace + key + ':'; const value = object[key]; if (typeof value === 'object') { payload += String.fromCharCode(10); addToPayload(value, whitespace + ' '); } else { payload += ' ' + value + String.fromCharCode(10); } } } addToPayload(data, ''); // MY CHANGE ENDS HERE <------------ const blob = new Blob([payload], { type: 'text/plain' }); const file = 'formData.yaml'; let link = document.createElement('a'); link.download = file; if (window.webkitURL != null) { link.href = window.webkitURL.createObjectURL(blob); } else { link.href = window.URL.createObjectURL(blob); link.style.display = "none"; document.body.appendChild(link); } link.click(); } oCtrl.addEventListener('change', changehandler); oTest.addEventListener('change', changehandler); oSave.addEventListener('click', savehandler); })
 <!DOCTYPE html> <html> <head> <title>Save form Data in a Text File using JavaScript</title> <h1>User Information </h1> <style> html, html * { box-sizing: border-box; border-color: teal; font-family: calibri; } html { background: radial-gradient(rgba(48, 97, 97, 0.5), rgba(255, 255, 255, 0.5)) } input[type=button], input[type=submit] { padding: 1rem; } input[type=text], textarea, select { font: 17px Calibri; width: 100%; padding: 12px; border: 1px solid rgb(19, 18, 18); border-radius: 4px; color: teal } fieldset { border: none; padding: 10px; overflow: hidden; color: rgb(16, 8, 32); font-size: 25px; font-style: initial; font-family: 'Times New Roman', Times, serif; } #extra { border: 2px solid black; background: whitesmoke; border-radius: 1rem; box-shadow: 0 0 5px black; width: calc(100% - 24px); margin: auto; float: none; clear: both; text-indent: 50px; } #extra h6 { margin: 0 } #extra style .invalid { border: 2px solid red!important; background: rgba(255, 0, 0, 0.1) } </style> <script src="script.js"></script> </head> <body> <template> <fieldset id='extra'> <h6>Additional Details Required</h6> <label for='Controller_ID_A'>Controller_ID:</label> <select name='Controller-ID1' required> <option value=""> - Select the Controller ID - </option> <option value='A'>A </select> <label for='HBA_Ports_A'>HBA_Ports:</label><input type='text' name='hba-ports1' placeholder='Enter the HBA Ports' /> <label for='MC_IP_A'>MC_IP:</label><input type='text' name='extra-ip1' placeholder='Enter the MC_IP' /> <label for='MC_Netmask_A'>MC_Netmask:</label><input type='text' name='netmask-ip1' placeholder='Enter the MC_Netmask' /> <label for='MC_Gateway_A'>MC_Gateway:</label><input type='text' name='gateway-ip1' placeholder='Enter the MC_Gateway' /> <label for='MC_A'>MC:</label><input type='text' name='rbod-mc1' placeholder='Enter the MC Port' /> <label for='SC_A'>SC:</label><input type='text' name='rbod-sc1' placeholder='Enter the SC Port' /> <label for='FU_A'>FU:</label><input type='text' name='rbod-fu1' placeholder='Enter the FU Port' /> <label for='EC_A'>EC:</label><input type='text' name='rbod-ec1' placeholder='Enter the EC Port' /> <label for='Controller_ID'>Controller_ID:</label> <select name='Controller-ID' required> <option value=""> - Select the Controller ID - </option> <option value='B'>B </select> <label for='HBA_Ports'>HBA_Ports:</label><input type='text' name='hba-ports' placeholder='Enter the HBA Ports' /> <label for='MC_IP'>MC_IP:</label><input type='text' name='extra-ip' placeholder='Enter the MC_IP' /> <label for='MC_Netmask'>MC_Netmask:</label><input type='text' name='netmask-ip' placeholder='Enter the MC_Netmask' /> <label for='MC_Gateway'>MC_Gateway:</label><input type='text' name='gateway-ip' placeholder='Enter the MC_Gateway' /> <label for='MC'>MC:</label><input type='text' name='rbod-mc' placeholder='Enter the MC Port' /> <label for='SC'>SC:</label><input type='text' name='rbod-sc' placeholder='Enter the SC Port' /> <label for='FU'>FU:</label><input type='text' name='rbod-fu' placeholder='Enter the FU Port' /> <label for='EC'>EC:</label><input type='text' name='rbod-ec' placeholder='Enter the EC Port' /> </fieldset> </template> <form name='myForm' method='POST'> <fieldset> <label for='Controller Type'>Controller Type</label> <select name='controller' required> <option value=""> - Select the Controller - </option> <option data-extra=true value='RAID'>RAID <option data-extra=true value='JBOD'>JBOD <option data-extra=true value='AP'>AP </select> </fieldset> <fieldset> <label for='Test Type'>Test Type</label> <select name='test' required> <option value=""> - Select The Test - </option> <option data-extra=true value='BFT'>BFT <option data-extra=true value='CTO'>CTO <option data-extra=true value='RAID Generic'>RAID Generic <option data-extra=true value='Port Check'>Port Check <option data-extra=true value='FW Generic'>FW Generic <option data-extra=true value='JBOD Generic'>JBOD Generic </select> </fieldset> <!-- insert templated additional details here --> <fieldset> <label for='Protocol Type'>Protocol Type</label> <select name='protocol' required> <option value=""> - Select The Protocol - <option data-extra=true value='SAS'>SAS <option data-extra=true value='iSCSI'>iSCSI <option data-extra=true value='FC'>FC </select> </fieldset> <fieldset> <label for='IP Address'>IP Address:</label> <input type='text' name='ip' placeholder='Enter your IP address' required /> </fieldset> <fieldset> <label for='Chasis Input'>Number of Chasis Input:</label> <input type='number' name='chassis' placeholder='Enter Number of Chasis' required /> </fieldset> <fieldset> <input type='button' name='save' value='Save data to file' /> </fieldset> </form> </body> </html>


You commented that you would prefer dynamic filenames.您评论说您更喜欢动态文件名。 You can replace你可以更换

const file = 'formData.yaml';

with something like this:像这样:

let file = 'test_' + data.PDU['PDU TEST'];
file += '_controller_' + data['Product Type'];
file += '_' + new Date().toISOString().substr(0, 10); // '2020-05-02'
file += '.yaml';
file = prompt('Filename:', file); // to edit manually
if (!file) { return; } // canceled by user

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如果数据属性(HTML)=== javascript 中的输入文本,如何更改已写入输入的每个字母的 javascript 颜色? - How can I change color in javascript for each letter which has been written into an input if data attribute(HTML) === input text in javascript? 如何确定用户或浏览器是否输入了表单上的数据? - How do I determine whether data on a form has been input by the user or the browser? 如何在已加载到另一个HTML文档的HTML文档中使用jquery? - How can I use jquery on a html document which has been loaded into another html document? 如果表单已经提交,如何预加载html表单? - How can I pre-load an html form if the form has already been submitted? 我如何转移已输入的值 <input number> 对象转换成javascript而不刷新页面? - How can i transfer value which has been typed in <input number> object into javascript without page refreshing? 如何让 HTML 表单按钮在屏幕上放置一个下拉表单列表,用户可以在其中输入文本 - How to make a HTML Form Button place a Dropdown form list on the screen, which the user can input text to 如何使用Javascript来判断浏览器是否更改了HTML输入字段? - How can I use Javascript to tell whether an HTML input field has been changed by the browser? 在用户提交表单之前,如何检查文本框和复选框是否已填写并选中? - How do i check that the textboxes and checkbox has been filled and checked before user can submit the form? 如何使用 jquery 读取已使用 html 表格上传的文件 csv? - how can i read with jquery a file csv that has been uploaded with html form? 如何保存html表单输入数据? - How can I save html form input data?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM