'In TypeScript, I can't seem to delete a specific value from an HTML table
I'm extremely new with JavaScript and TypeScript (like, day 3). I need to let the user delete a value that they entered into a table. I've been working on this one problem for several, several hours and nothing I've tried has worked. Any help would be greatly appreciated.
This is my html:
<head>
<meta charset="UTF=8">
<meta name ="viewport" content="width-device-width, initial-scale=1.0">
<title>CCP Tier 2 Week 1</title>
<link rel="stylesheet" href="ccpt2w1.css">
<script src="ccpt2w1.js"></script>
</head>
<body>
<div class="topOfPage">
<h1>To-Do List</h1><br/>
</div>
<div class="flexboxRow">
<div class="flexboxColumn">
<form name="manageItems">
<h2>Manage My To-Dos</h2>
<br/>
<label for="toDoItem">To-Do Item : </label>
<input type="text" id="toDoItem" name="toDoItem"><br/> <br/>
<button type="button" onclick="addItem()">Add Item</button>
<button type="button" onclick="deleteItem()">Delete Item</button>
<button type="button" onclick="checkItem()">Mark Complete</button><br/>
</form>
</div>
<div class="flexboxColumn">
<!-- <form name="toDoList"> -->
<h2>My To-Dos</h2>
<table id="toDoTable">
</table>
<br/><br/>
<button type="button" onclick="clearList()">Clear the List</button>
<!-- </form> -->
</div>
</div>
</body>
</html>
This is my ts file:
function addItem() {
var newItem = document.forms["manageItems"]["toDoItem"].value;
if (newItem == "") {
alert("Please enter a to-do item.")
return false;
}
else {
var tableRef = document.getElementById("toDoTable") as HTMLTableElement;
(tableRef.insertRow(tableRef.rows.length)).innerHTML = newItem
document.forms["manageItems"]["toDoItem"].value = ""; // clears the input field after the value has been added to the list.
/* return true; */
}
}
function deleteItem() {
var tableRef = document.getElementById("toDoTable") as HTMLTableElement;
var itemToRemove = document.forms["manageItems"]["toDoItem"].value;
if (itemToRemove == "") {
alert("Please enter an item to delete.")
return false;
}
else {
document.getElementById("tableRef").deleteRow("itemToRemove");
tableRef.value = "";
document.forms["manageItems"]["toDoItem"].value = ""; // clears the input field after the value has been added to the list.
}
}
function clearList() {
var tableRef = document.getElementById("toDoTable");
tableRef.innerHTML = "";
}
Solution 1:[1]
- when adding - check if there is such an element
- for search (when deleting), create an attribute
- when deleting, search by attribute and delete
const createId = (str) => {
return `id_${str.replace(/ /ig, '_')}`;
}
function addItem() {
const newItem = document.forms['manageItems']['toDoItem'].value;
if (newItem == '') {
alert('Please enter a to-do item.')
return false;
} else {
const tableRef = document.getElementById('toDoTable');
/** check if there is such an element */
const tr = document.querySelector(`[data-id="${createId(newItem)}"]`);
if (tr) {
alert('has already')
return false;
}
const row = (tableRef.insertRow(tableRef.rows.length));
row.innerHTML = `<td>${newItem}</td>`;
/** create and add an attribute */
row.dataset.id = createId(newItem)
document.forms['manageItems']['toDoItem'].value = ''; // clears the input field after the value has been added to the list.
/* return true; */
}
}
function deleteItem() {
const tableRef = document.getElementById('toDoTable');
const itemToRemove = document.forms['manageItems']['toDoItem'].value;
if (itemToRemove == '') {
alert('Please enter an item to delete.')
return false;
} else {
/** search by attribute and delete */
const tr = document.querySelector(`[data-id="${createId(itemToRemove)}"]`);
if (!tr) {
alert('...');
return false;
}
tr.remove();
document.forms['manageItems']['toDoItem'].value = ''; // clears the input field after the value has been added to the list.
}
}
function clearList() {
const tableRef = document.getElementById('toDoTable');
tableRef.innerHTML = '';
}
<div class="topOfPage">
<h1>To-Do List</h1><br/>
</div>
<div class="flexboxRow">
<div class="flexboxColumn">
<form name="manageItems">
<h2>Manage My To-Dos</h2>
<br/>
<label for="toDoItem">To-Do Item : </label>
<input type="text" id="toDoItem" name="toDoItem"><br/> <br/>
<button type="button" onclick="addItem()">Add Item</button>
<button type="button" onclick="deleteItem()">Delete Item</button>
<button type="button" onclick="checkItem()">Mark Complete</button><br/>
</form>
</div>
<div class="flexboxColumn">
<!-- <form name="toDoList"> -->
<h2>My To-Dos</h2>
<table id="toDoTable">
</table>
<br/><br/>
<button type="button" onclick="clearList()">Clear the List</button>
<!-- </form> -->
</div>
</div>
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 |