运行展示页面
先布置html布局
<div id="formDiv">
<h4>添加商品</h4>
<table>
<tr>
<td class="word">商品名称:</td>
<td class="inp">
<input type="text" name="empName" id="empName">
</td>
</tr>
<tr>
<td colspan="2" align="center">
<button id="addEmpButton" value="abc">
添加
</button>
</td>
</tr>
</table>
</div>
<div id="result">
<!-- <button>添加商品</button> -->
<table id = "employeeTable">
<tr>
<th>Number</th>
<th>商品名称</th>
<th>数量</th>
<th>价格</th>
<th> </th>
</tr>
<tr>
<td>1</td>
<td>加多宝</td>
<td>
<button class= "reduce">-</button><input type="text" value="0" style="width: 25px;height: 20px;text-align: center;"><button class = "plus">+</button>
</td>
<td>5.5</td>
<td><a href="#">删除</a></td>
</tr>
<tr>
<td>2</td>
<td>卫龙辣条</td>
<td>
<button class = "reduce">-</button ><input type="text" value="0" style="width: 25px;height: 20px;text-align: center;"><button class = "plus">+</button>
</td>
<td>0.5</td>
<td><a href="#">删除</a></td>
</tr>
<tr>
<td>3</td>
<td>螺蛳粉</td>
<td>
<button class= "reduce">-</button><input type="text" value="0" style="width: 25px;height: 20px;text-align: center;"><button class = "plus">+</button>
</td>
<td>9.5</td>
<td><a href="#">删除</a></td>
</tr>
<tfoot>
<td colspan="5" id = "total">总计:</td>
</tfoot>
</table>
</div>
再设置好css
<style>
*{
margin: 0;
padding: 0;
}
#result,#formDiv{
width: 500px;
background-color:orange;
margin-left: 200px;
margin-top: 50px;
}
table{
margin: 50px auto;
}
tr{
width: 255px;
min-height: 23px;
}
tr:nth-of-type(even){
background-color: pink;
}
tr:nth-of-type(odd){
background-color:deepskyblue;
}
input{
outline: none;
}
#employeeTable{
text-align: center;
}
#addEmpButton,#gen{
width: 100px;
}
button{
width: 25px;
height: 25px;
font-size: 12px;
}
</style>
js部分 :
1.添加商品
需求:输入商品名称时,当点击添加按钮,会在商品区表格渲染出来 价格随机
想法:先拿到输入框的值判断是否为空,不为空给添加按钮设置点击事件,当点击时 动态创建tr
/*
增加商品 想法 拿到添加按钮 设置商品初始值i 判断内容不能为空 每当点击添加一次 初始值加以
并拼接字符串tr
*/
//拿到添加按钮
let add = document.getElementById('addEmpButton')
console.log(add)
let shopnum = 3
//给添加按钮绑定事件
add.onclick = function(){
//每点击一次 就自动加1
shopnum += 1
//获取框里的值
let input = document.getElementById('empName').value;
//判断商品不能为空
if(!input){
confirm('添加商品不能为空')
return
}
var price = Math.floor(Math.random()*20)
console.log(price)
//不用拼接 创建tr 给tr里面赋值innerHTML
var tr = document.createElement('tr')
tr.innerHTML = ` <tr>
<td>${shopnum}</td>
<td>${input}</td>
<td>
<button class = "reduce">-</button ><input type="text" value="0" style="width: 25px;height: 20px;text-align: center;"><button class = "plus">+</button>
</td>
<td>${price}</td>
<td><a href="#">删除</a></td>
</tr>`
//将tr追加到tbody里
document.getElementsByTagName('tbody')[1].appendChild(tr)
}
2.删除商品
需求:当点击删除键时 会弹出提示,确定则删除它
想法:拿到删除按钮 给其绑上点击事件 再找到点击时对应的行 拿到行中第一个td即name 设置flag 点击弹出提示 确定 则移除当行
//拿到删除按钮
let del = document.getElementsByTagName('a')
console.log(del)
//遍历它
for(let i = 0;i<del.length;i++){
//给每个删除按钮绑定事件
del[i].onclick = function(){
//找到它的行
let tr = this.parentNode.parentNode
//拿到行中第一个td即name 通过获取标签名拿 因为是td所以用innerHTML
let name = tr.getElementsByTagName('td')[1].innerHTML
console.log(name)
//当点击当前删除时 弹出消息
let flag = confirm(`确定删除${name}吗?`)
if(flag){
//删除自己
tr.remove(tr)
}
}
}
运行发现问题:
问题:新增加的商品 当点击删除按钮时没有反应
解决:要在添加商品时 在其后面再给新增的tr设置删除功能
//将tr追加到tbody里
document.getElementsByTagName('tbody')[1].appendChild(tr)
//再将添加的商品 设置删除 在tr后拿
let a = tr.getElementsByTagName('a')[0]
console.log(a)
//a为当前的啊
a.onclick = function (){
let tr = this.parentNode.parentNode
let name= document.getElementById('empName').value;
console.log(name)
let flag = confirm(`确定要删除${name}吗?`)
if(flag){
tr.remove(tr)
}
}
document.getElementById('empName').value = ''
}
加减按钮
拿到 加减两侧按钮 再拿到里面的value值 转为数字型 自增自减即可
问题: --this.nextElementSibling.value 不能用变量存储 判断时也不能
因为改变的是值 不是地址 所以要直接引用
//加减两侧按钮
//拿到加 减
var table = document.getElementById('employeeTable')
var addb = table.getElementsByClassName('plus')
var redb = table.getElementsByClassName('reduce')
console.log(addb,redb)
// var num =1;
//用onclick 绑定点前点击
for(let i = 0; i<redb.length;i++){
redb[i].onclick = function(){
//拿到当前点击加里面框里的值
var num = --this.nextElementSibling.value
if(this.nextElementSibling.value<0){
this.nextElementSibling.value = 0;
}
// var num = ++input
}
}
for(let j = 0;j<addb.length;j++){
addb[j].onclick = function(){
var num = ++this.previousSibling.value
console.log(num)
}
}
整体代码
html
<body>
<div id="formDiv">
<h4>添加商品</h4>
<table>
<tr>
<td class="word">商品名称:</td>
<td class="inp">
<input type="text" name="empName" id="empName">
</td>
</tr>
<tr>
<td colspan="2" align="center">
<button id="addEmpButton" value="abc">
添加
</button>
</td>
</tr>
</table>
</div>
<div id="result">
<!-- <button>添加商品</button> -->
<table id = "employeeTable">
<thead>
<tr>
<th>Number</th>
<th>商品名称</th>
<th>数量</th>
<th>价格</th>
<th> </th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>加多宝</td>
<td>
<button class= "reduce">-</button><input type="text" value="0" style="width: 25px;height: 20px;text-align: center;"><button class = "plus">+</button>
</td>
<td>5.5</td>
<td><a href="#">删除</a></td>
</tr>
<tr>
<td>2</td>
<td>卫龙辣条</td>
<td>
<button class = "reduce">-</button ><input type="text" value="0" style="width: 25px;height: 20px;text-align: center;"><button class = "plus">+</button>
</td>
<td>0.5</td>
<td><a href="#">删除</a></td>
</tr>
<tr>
<td>3</td>
<td>螺蛳粉</td>
<td>
<button class= "reduce">-</button><input type="text" value="0" style="width: 25px;height: 20px;text-align: center;"><button class = "plus">+</button>
</td>
<td>9.5</td>
<td><a href="#">删除</a></td>
</tr>
</tbody>
<tfoot>
<td colspan="5" id = "total">总计:</td>
</tfoot>
</table>
</div>
CSS
<style>
*{
margin: 0;
padding: 0;
}
#result,#formDiv{
width: 500px;
background-color:orange;
margin-left: 200px;
margin-top: 50px;
}
table{
margin: 50px auto;
}
tr{
width: 255px;
min-height: 23px;
}
tr:nth-of-type(even){
background-color: pink;
}
tr:nth-of-type(odd){
background-color:deepskyblue;
}
input{
outline: none;
}
#employeeTable{
text-align: center;
}
#addEmpButton,#gen{
width: 100px;
}
button{
width: 25px;
height: 25px;
font-size: 12px;
}
</style>
js
window.onload = function(){
/*
删除事件 想法:拿到删除按钮 给其绑上点击事件 再找到点击时对应的行 拿到行中第一个td即name
设置flag 点击弹出提示 确定 则移除当行
*/
//拿到删除按钮
let del = document.getElementsByTagName('a')
//遍历它
for(let i = 0;i<del.length;i++){
//给每个删除按钮绑定事件
del[i].onclick = function(){
//找到它的行
var tr = this.parentNode.parentNode
//拿到行中第一个td即name 通过获取标签名拿 因为是td所以用innerHTML
var name = tr.getElementsByTagName('td')[1].innerHTML
console.log(name)
//当点击当前删除时 弹出消息
let flag = confirm(`确定删除${name}吗?`)
if(flag){
//删除自己
tr.remove(tr)
}
}
}
/*
增加商品 想法 拿到添加按钮 设置商品初始值i 判断内容不能为空 每当点击添加一次 初始值加以
并拼接字符串tr
*/
//拿到添加按钮
let add = document.getElementById('addEmpButton')
let shopnum = 3
//给添加按钮绑定事件
add.onclick = function(){
//每点击一次 就自动加1
shopnum += 1
//获取框里的值
let input = document.getElementById('empName').value;
//判断商品不能为空
if(!input){
confirm('添加商品不能为空')
return
}
var price = Math.floor(Math.random()*20)
//不用拼接 创建tr 给tr里面赋值innerHTML
var tr = document.createElement('tr')
tr.innerHTML = ` <tr>
<td>${shopnum}</td>
<td>${input}</td>
<td>
<button class = "reduce">-</button ><input type="text" value="0" style="width: 25px;height: 20px;text-align: center;"><button class = "plus">+</button>
</td>
<td>${price}</td>
<td><a href="#">删除</a></td>
</tr>`
//将tr追加到tbody里
document.getElementsByTagName('tbody')[1].appendChild(tr)
//再将添加的商品 设置删除 在tr后拿
let a = tr.getElementsByTagName('a')[0]
console.log(a)
//a为当前的啊
a.onclick = function (){
let tr = this.parentNode.parentNode
let name= document.getElementById('empName').value;
console.log(name)
let flag = confirm(`确定要删除${name}吗?`)
if(flag){
tr.remove(tr)
}
}
document.getElementById('empName').value = ''
//加减两侧按钮
//拿到加 减
var table = document.getElementById('employeeTable')
var addb = table.getElementsByClassName('plus')
var redb = table.getElementsByClassName('reduce')
console.log(addb,redb)
// var num =1;
//用onclick 绑定点前点击
for(let i = 0; i<redb.length;i++){
redb[i].onclick = function(){
//拿到当前点击加里面框里的值
var num = --this.nextElementSibling.value
if(this.nextElementSibling.value<0){
this.nextElementSibling.value = 0;
}
// var num = ++input
}
}
for(let j = 0;j<addb.length;j++){
addb[j].onclick = function(){
var num = ++this.previousSibling.value
console.log(num)
}
}
}
}