I have 3 tables with two columns each (image). I want to make the table editable (edit row, add rows, delete rows) and I'm a little lost. Each table row has an edit button, and at the end of each table there is an "add" button.
If I want the modal title to either say edit or add would I need to make 2 different modals or is there a way to do this in JS?
How would I do about making the table editable? I tried putting together some JS (see below)
Modal:
<div class="modal" id="modal">
<div class="modal-header">
<div class="modal-titel">Edit Account</div>
<button data-close-button class="close-button">×</button>
</div>
<div class="modal-body"><input type="text" id="new_acc" placeholder="Name"><br><br><input type="text" id="new_balance" placeholder="Currency"><br><br><input type="text" placeholder="Balance"></div>
<div class="modal-actionbox">
<input type="button" class="modal-action" value="">
<input type="button" class="modal-action" value="⌫">
</div>
</div>
Tables:
<div class="Accounts">
<br><br><button type="button" class="collapsible"><h3 id="Accounts"> Fiat Accounts</h3></button>
<div class="content" id="acc_list"><table class="acc_table" id="acc_table">
<tr id=acc_row1><td id="acc_name1" class="accname">Cash</td><td id="acc_balance1" class="accbal">$5322.54<button class="edit_account" data-modal-target="#modal" id="editaccounts">✎</button></td></tr>
<tr id=acc_row2><td id="acc_name2" class="accname">Credit Card</td><td id=acc_balance2 class="accbal">$1362.21<button class="edit_account" data-modal-target="#modal" id="editaccounts">✎</button></td></tr>
<tr id=acc_row3><td id="acc_name3" class="accname">Checking Account</td><td id=acc_balance3 class="accbal">$4322.50<button class="edit_account" data-modal-target="#modal" id="editaccounts">✎</button></td></tr>
<tr id=acc_row4><td id="acc_name4" class="accname">Savings Account</td><td id=acc_balance4 class="accbal">$12322.50<button class="edit_account" data-modal-target="#modal" id="editaccounts">✎</button></td></tr>
</table><div><h4 id="acc"> <button data-modal-target="#modal" class="add_account" id="editaccounts">+</button></h4></div></div>
<div class="Stocks & Commodeties">
<br><button type="button" class="collapsible"><h3> Stocks & Commodeties</h3></button>
<div class="content" id="acc_list"><table class="acc_table" id="acc_table">
<tr id=acc_row1><td id="acc_name1" class="accname">DOW JONES 50 TITANS</td><td id="acc_balance1" class="accbal">$5322.54<button class="edit_account" data-modal-target="#modal" id="editaccounts">✎</button></td></tr>
<tr id=acc_row2><td id="acc_name2" class="accname">Oil Certificates</td><td id=acc_balance2 class="accbal">$1362.21<button class="edit_account" data-modal-target="#modal" id="editaccounts">✎</button></td></tr>
<tr id=acc_row3><td id="acc_name3" class="accname">AAPL</td><td id=acc_balance3 class="accbal">$4322.50<button class="edit_account" data-modal-target="#modal" id="editaccounts">✎</button></td></tr>
<tr id=acc_row4><td id="acc_name4" class="accname">Physical Gold</td><td id=acc_balance4 class="accbal">$12322.50<button class="edit_account" data-modal-target="#modal" id="editaccounts">✎</button></td></tr>
</table><div><h4 id="acc"> <button data-modal-target="#modal" class="add_account" id="editaccounts">+</button></h4></div></div>
</div>
<div class="Digital Currencies">
<br><button type="button" class="collapsible"><h3> Digital Currencies</h3></button>
<div class="content" id="acc_list"><table class="acc_table" id="acc_table">
<tr id=acc_row1><td id="acc_name1" class="accname">Bitcoin</td><td id="acc_balance1" class="accbal">$5322.54<button class="edit_account" data-modal-target="#modal" id="editaccounts">✎</button></td></tr>
<tr id=acc_row2><td id="acc_name2" class="accname">Ethereum</td><td id=acc_balance2 class="accbal">$1362.21<button class="edit_account" data-modal-target="#modal" id="editaccounts">✎</button></td></tr>
<tr id=acc_row3><td id="acc_name3" class="accname">Chainlink</td><td id=acc_balance3 class="accbal">$4322.50<button class="edit_account" data-modal-target="#modal" id="editaccounts">✎</button></td></tr>
<tr id=acc_row4><td id="acc_name4" class="accname">DAI</td><td id=acc_balance4 class="accbal">$12322.50<button class="edit_account" data-modal-target="#modal" id="editaccounts">✎</button></td></tr>
</table><div><h4 id="acc"> <button data-modal-target="#modal" class="add_account" id="editaccounts">+</button></h4></div></div>
</div>
</div>
Modal JS:
const openModalButtons = document.querySelectorAll("[data-modal-target]");
const closeModalButtons = document.querySelectorAll("[data-close-button]");
const overlay = document.getElementById("overlay");
openModalButtons.forEach(button => {
button.addEventListener("click", () => {
const modal = document.querySelector(button.dataset.modalTarget)
openModal(modal)
})
})
overlay.addEventListener("click", () =>{
const modals = document.querySelectorAll(".modal.active")
modals.forEach(modal => {
closeModal(modal)
})
})
closeModalButtons.forEach(button => {
button.addEventListener("click", () => {
const modal = button.closest(".modal")
closeModal(modal)
})
})
function openModal(modal) {
if (modal == null) return
modal.classList.add("active");
overlay.classList.add("active");
}
function closeModal(modal) {
if (modal == null) return
modal.classList.remove("active");
overlay.classList.remove("active");
}
My attempt at making the table editable JS:
function edit_account(no)
{
var accountname=document.getElementById("acc"+no);
var accountbalance=document.getElementById("balance"+no);
var accountname_data=accname.innerHTML;
var accountbalance_data=accbalance.innerHTML;
accname.innerHTML="<input type='text' id='accname_text"+no+"' value='"+accname_data+"'>";
accbalance.innerHTML="<input type='text' id='accbalance_text"+no+"' value='"+accbalance_data+"'>";
}
function save_account(no)
{
var name_val=document.getElementById("accname_text"+no).value;
var balance_val=document.getElementById("accbalance_text"+no).value;
document.getElementById("acc"+no).innerHTML=name_val;
document.getElementById("balance"+no).innerHTML=balance_val;
}
function delete_account(no)
{
document.getElementById("acc"+no+"").outerHTML="";
}
function add_account()
{
var new_acc=document.getElementById("new_acc").value;
var new_balance=document.getElementById("new_balance").value;
var list=document.getElementById("acc_list");
var list_len=(table.rows.length)-1;
var row = table.insertRow(table_len).outerHTML="<tr id='row"+table_len+"'><td id='acc_name"+table_len+"'>"+new_acc+"</td><td id='acc_balance"+table_len+"'>"+new_balance+"</td></tr>";
document.getElementById("new_acc").value="";
document.getElementById("new_balance").value="";
}