我正在用Javascript創建一個簡單的CRUD應用程式,我在顯示本地存盤的資料表時遇到了問題。
這就像制作一個 TODO 串列,但這是用一個表,并在一行和一列中輸入資料。
我不知道如何清楚地解釋這個問題,重要的是,我希望從我的輸入表單和提交到本地存盤的結果能夠正確地顯示在表格中。
這就是代碼 :
。const
myForm = document.forms['my-form'] // form name pada tag html form.
, table = document.querySelector('#myTable tbody')
, dataArr = JSON.parse(localStorage. getItem('dataArr') || '[] ')。
var selectedRow = null.
var number = 0
// Tabel init
dataArr.forEach(row=>/span>{
let newRow = table.insertRow()
newRow.insertCell().textContent = row.no = number
newRow.insertCell().textContent = row.inputNL。
newRow.insertCell().textContent = row.inputJK。
newRow.insertCell().textContent = row.inputNH。
newRow.insertCell().textContent = row.inputA。
newRow.insertCell().innerHTML = `<a onClick="onDelete(this)"><i class="fas fa-times"></i> </a> `
})
function onFormSubmit() {
if (validate() ) {
if (selectedRow == null) {
// Menambahkan entri ke LocalStorage :
dataArr.push(Object. fromEntries(new FormData(myForm).entries())。
localStorage.setItem('dataArr', JSON. stringify( dataArr ))
// Memasukkan Data pada Baris Baru。
let newRow = table.insertRow()
newRow.insertCell().textContent = myForm.no.value= number
newRow.insertCell().textContent = myForm.inputNL.value.
newRow.insertCell().textContent = myForm.inputJK.value。
newRow.insertCell().textContent = myForm.inputNH.value。
newRow.insertCell().textContent = myForm.inputA.value。
newRow.insertCell().innerHTML = `<a onClick="onDelete(this)"><i class="fas fa-times"></i> </a> `
}
resetForm()。
}
}
// Function untuk Mereset Data yang sudah diSumbit di dalam Input。
function resetForm() {
document.getElementById("no").value = " ";
document.getElementById("inputNL").value = " ";
document.getElementById("inputJK").value = "Pria"。
document.getElementById("inputNH").value = "";
document.getElementById("inputA").value = " ";
selectedRow = null;
}
// Function untuk Delete Data; selectedRow = null; }
function onDelete(td) {
if (confirm('Apa kamu yakin ingin Menghapus Data ini?'/span>)) {
row = td.parentElement.parentElement;
document.getElementById("myTable"/span>)。 deleteRow(row.rowIndex)。
resetForm()。
}
hapusDataLocal(td.parentElement.parentElement)
}
function hapusDataLocal(dataItem) {
dataArr.forEach(function(task, index) {
if (dataItem.textContent == task ) {
dataArr.splice(index, 1)。
}
});
localStorage.setItem(dataArr, JSON.stringify(dataArr))。
}
// Function untuk Memvalidasi Data。
function validate() {
isValid = true;
if (document.getElementById("inputNL"/span>). value == "" || document.getElementById("inputJK"/span>) 。 value == "" || document.getElementById("inputNH") 。 value == "" || document. getElementById("inputA").value == ") {
isValid = false;
alert("Isi Semua Formnya dengan Benar!") 。
}
return isValid;
}
<!-- Registration Form -->
<div class="container w-50 mt-3 shadow p-3 mb-5 bg-white rounded"/span>>
<div class="p-3">
<h1 class="mb-4"/span>> 注冊表</h1>
< form class="task-form" name="my-form" onsubmit="event. preventDefault();onFormSubmit();" autocomplete="off">
< input type="hidden" name="no" id="no" value=">
<label for="inputNL"/span> class="form-label"/span>> Nama Lengkap</label>。
< input type="text" id="inputNL" "form-control mb-2" placeholder="Nama Lengkap">
<label for="inputJK"/span>class="form-label"/span>> Jenis Kelamin</label>。
< select class="form-select mb-2" id="inputJK" name="inputJK">
<option value="Pria"/span>> Pria</option>。
<option value="Wanita" > Wanita</option>
</select>/span>
<label for="inputNH"/span> class="form-label"/span>> 沒有HP</label>
< input type="number" id="inputNH" name="inputNH" class="form-control mb-2" placeholder="No HP">
<label for="inputA"/span> class="form-label"/span>> Alamat</label>
< textarea id="inputA" name="inputA" class="form-control mb-2" style="min-width: 100%" placeholder="Alamat"></textarea>
< input type="submit" value="submit" class="btn btn-primary btn-md my-3" >
</form>
</div>/span>
</div>/span>
<!-- 表-->
<div class="container mt-3 shadow p-3 mb-5 bg-white rounded"/span>>
<div class="p-3">
< table class="table" id="myTable">
<thead>
<th scope="col"/span>> #</th>#"col">
<th scope="col"/span>> Nama Lengkap</th>。
<th scope="col" > Jenis Kelamin</th>。
<th scope="col"/span>> 沒有HP</th>
<th scope="col"/span>> Alamat</th>。
<th scope="col" > Aksi</th>
</thead>/span>
<tbody>/span>
</tbody>/span>
</table>/span>
</div>
</div>/span>
<iframe name="sif1" sandbox="allow-forms allow-modals allow-scripts" class="snippet-box-edit snippet-box-result" frameborder="0"></iframe>
這是該表的問題,資料與該列不匹配。
而我的實際結果是,我的資料不符合列。
而我想要的實際結果是這樣的。
uj5u.com熱心網友回復:
做這樣的事情......
span class="hljs-keyword">const
myForm = document.forms['my-form'] //span> 所有表單元素的唯一參考。
, myTableTBody = document.querySelector('#myTable tbody')
, dataNL = JSON.parse(localStorage. getItem('dataNL') || '[] ')
;
// init table
dataNL.forEach(row=> )
{
let newRow = myTableTBody.insertRow()
newRow.insertCell().textContent = row.no。
newRow.insertCell().textContent = row.inputNL。
newRow.insertCell().textContent = row.inputJK。
newRow.insertCell().textContent = row.inputNH。
newRow.insertCell().textContent = row.inputA。
newRow.insertCell().textContent = ' '
})
myForm.onsubmit = e => //span>
{
e.preventDefault()
//將條目添加到本地存盤 :
dataNL.push(Object. fromEntries(new FormData(myForm).entries())。
localStorage.setItem('dataNL'/span>, JSON. stringify( dataNL ))
//插入新行。
let newRow = myTableTBody.insertRow()
newRow.insertCell().textContent = myForm.no.value。
newRow.insertCell().textContent = myForm.inputNL.value。
newRow.insertCell().textContent = myForm.inputJK.value。
newRow.insertCell().textContent = myForm.inputNH.value。
newRow.insertCell().textContent = myForm.inputA.value。
newRow.insertCell().textContent = ''/span> // Action
}
uj5u.com熱心網友回復:
首先:
- 改變
< form class="task-form" name="my-form" onsubmit="event. preventDefault();onFormSubmit();" autocomplete="off">
to
< form class="task-form" name="my-form" autocomplete="off">
Js的代碼是:
span class="hljs-keyword">const
myForm = document.forms['my-form'] // form name pada tag html form
//....
myForm.onsubmit = e =>
{
e.preventDefault()
//.../span>
- 從下面的代碼段中添加我的CSS(已屏蔽)
你如何洗掉本地存盤資料?
在對no的管理中存在一些不一致的地方。
我還做了一些其他的修正。
洗掉一個<table><TR>的作業...
而且請不要對表單元素使用getElementById!
看看我是如何編碼你的validate()函式的
。
關于這一點,請看我以前的帖子:6月30日13:06和19年6月14日14:17
我和所有的編碼員一樣,一旦我開始做一個專案,就不能半途而廢。我希望這能幫助你更好地敲定你的專案。
我對表格中的文本地址轉置的顯示有點頭疼,因為它有溢位的問題;因此,我想到了使用重碼,至少可以去除不必要的白線...
。
所以,也請看從多行輸入中洗掉空行和雙倍空格的單一重合詞const myForm = document.forms['my-form'] // form name pada tag html form. , myTable = document.querySelector('#myTable') , myTbody = document.querySelector('#myTable tbody') , dataArr = JSON.parse(localStorage. getItem('dataArr') || ' []') , rowsInfo = { last_no : 0 , noSelect : '[]'true ! , index : 0 ! , tRow : null 。 } , addTableRow = row => ? { rowsInfo.last_no = Math.max( rowsInfo.last_no, row.no ) let newRow = myTbody.insertRow() newRow.insertCell().textContent = row.no。 newRow.insertCell().textContent = row.inputNL。 newRow.insertCell().textContent = row.inputJK。 newRow.insertCell().textContent = row.inputNH。 newRow.insertCell().innerHTML = `<div>${row.inputA}</div> ` newRow.insertCell().innerHTML = `<i class="fas fa-times"> </i>` }; dataArr.forEach(addTableRow) // Tabel init. ; myForm.onsubmit = e => { e.preventDefault() if(validate() { if (rowsInfo.noSelect) { let newRow = Object. fromEntries(new FormData(myForm).entries() newRow.no= rowsInfo.last_no= rowsInfo. dataArr.push(newRow)。 addTableRow (newRow) // Memasukkan Data pada Baris Baru。 } else { let index = rowsInfo.index , eTR = rowsInfo.lead , eTR = rowsInfo.tRow 。 ; eTR.cells[1].textContent = dataArr[index] 。 inputNL = myForm.inputNL.value。 eTR.cells[2].textContent = dataArr[index] 。 inputJK = myForm.inputJK.value。 eTR.cells[3].textContent = dataArr[index] 。 inputNH = myForm.inputNH.value。 dataArr[index].inputA = myForm.inputA.value。 eTR.cells[4]。 innerHTML = `<div>${myForm.inputA.value}</div> ` eTR.classList.remove('selected') } localStorage.setItem('dataArr', JSON。 stringify( dataArr )) //Menambahkan entri ke LocalStorage。 resetForm() } } function resetForm() // Function untuk Mereset Data yang sudah diSumbit dialam Input { myForm.reset() rowsInfo.noSelect=true } function validate() // Function untuk Memvalidasi Data { myForm.inputNL.value = myForm.inputNL.value.trim() myForm.inputJK.value = myForm.inputJK.value.trim() myForm.inputNH.value = myForm.inputNH.value.trim() myForm.inputA.value = myForm.inputA。 value.replace(/^s*$[ ]*|^[^S ] |[^S ] $|([^S ]){2,}/gm, '1') myForm.inputA.value = myForm.inputA. value.replace(/ *$/, '') //洗掉最后的斷行。 let isValid = ( myForm.inputNL.value !== '') && myForm.inputJK.value !=='' && myForm.inputNH.value !=='' && myForm.inputA.value !== '' ! ) if (!isValid) alert('Isi Semua Formnya dengan Benar! ') ; return isValid } myTbody.onclick = ({target}) =>/span> { let eTR = target.closest('tr'/span>) , rowNo = parseInt( eTR.cells[0].textContent ) , index = dataArr.findIndex(x=>x.no==rowNo) , isDel = target.matches('i.fa-times, td:nth-of-type(6)'/span>) ; if (!eTR.classList.toggle('selected') & & !isDel) { resetForm() } else() { myTbody.querySelectorAll('tr').forEach(tr=>;tr. classList.toggle('selected', eTR===tr) rowsInfo.noSelect=false。 rowsInfo.index = index rowsInfo.tRow = eTR myForm.no.value = dataArr[index].no. myForm.inputNL.value = dataArr[index].inputNL。 myForm.inputJK.value = dataArr[index].inputJK。 myForm.inputNH.value = dataArr[index].inputNH. myForm.inputA.value = dataArr[index].inputA. if (isDel && confirm('Apa kamu yakin ingin Menghapus Data ini?'/span>)) { dataArr.splice(index, 1) myTable.deleteRow(eTR.rowIndex) localStorage.setItem('dataArr', JSON. stringify(dataArr)) resetForm() rowsInfo.last_no = dataArr. reduce((mx,{no})=> Math. max(mx,no),0) } } }#myTable { table-layout : fixed; /*其中一個Boostrap總是丟失。*/ } #myTable tbody tr.selected { background-color : darkblue; color : whitesmoke; } #myTable tbody tr:hover{ background-color : lightblue; cursor : pointer; } #myTable tbody tr.selected: hover{ background-color : #1c1ce0; } #myTable tbody td: nth-of-type(5) div { max-height : 1.2em; /* no multilines displaying */ white-space : pre; overflow : hidden; } #myTable th:nth-of-type(1)。 #myTable td:nth-of-type(1)。 #myTable th:nth-of-type(6)。 #myTable td:nth-of-type(6){ width : 4em; text-align : center; } #myTable tbody td: nth-of-type(6): hover { color : red; }<iframe name="sif2" sandbox="allow-forms allow-modals allow-scripts" class="snippet-box-edit snippet-box-result" frameborder="0"></iframe> localStorage物件被認為是不安全的SO代碼段。< link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="styleheet" >。 integrity="sha384-KyZXEAg3QhqLMpG8r 8fhAXLRk2vvoC2f3B09zVXn8CA5QIVfZOJ3BCsw2P0p/We" crossorigin="anonymous"/span>> <link rel=" stylesheet" href="https://use. fontawesome.com/releases/v5.13.0/css/all.css"/span> > <!-- 注冊表 --> <div class="container w-50 mt-3 shadow p-3 mb-5 bg-white rounded"> <div class="p-3"/span>> <h1 class="mb-4"/span>> 注冊表</h1> < form class="task-form" name="my-form" autocomplete=off"> < input type="hidden" name="no" id="no" value="> <label for="inputNL"/span> class="form-label"/span>> Nama Lengkap</label>。 < input type="text" id="inputNL" "form-control mb-2" placeholder="Nama Lengkap"> <label for="inputJK"/span>class="form-label"/span>> Jenis Kelamin</label>。 < select class="form-select mb-2" id="inputJK" name="inputJK"> <option value="Pria"/span>> Pria</option>。 <option value="Wanita" > Wanita</option> </select>/span> <label for="inputNH"/span> class="form-label"/span>> 沒有HP</label> <input type="rowsInfo. last_no" id="inputNH" name="inputNH" class="form-control mb-2" placeholder="No HP"/span>> <label for="inputA"/span> class="form-label"/span>> Alamat</label> < textarea id="inputA" name="inputA" class="form-control mb-2" style="min-width: 100%" placeholder="Alamat"></textarea> < input type="submit" value="submit" class="btn btn-primary btn-md my-3" > </form> </div>/span> </div>/span> <!-- 表--> <div class="container mt-3 shadow p-3 mb-5 bg-white rounded"/span>> <div class="p-3"> < table class="table" id="myTable"> <thead> <th scope="col"/span>> #</th>#"col"> <th scope="col"/span>> Nama Lengkap</th>。 <th scope="col" > Jenis Kelamin</th>。 <th scope="col"/span>> 沒有HP</th> <th scope="col"/span>> Alamat</th>。 <th scope="col" > Aksi</th> </thead>/span> <tbody> </tbody> </table>/span> </div> </div>/span>PS:我完全使用Whitesmiths風格
。轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/320458.html
標籤:
上一篇:如何訪問此分頁


