按钮的点击事件无效,也不报错
js代码:
for (var i = 0; i < fileTable.length; i++) {
var $trTemp = $("<tr></tr>");
$trTemp.append("<td>" + "<input type='button' id='delete' value='删除'/> " + "</td>");
$trTemp.append("<td>" + fileTable[i].FileName + "</td>");
$trTemp.append("<td>" + fileTable[i].NameCh + "</td>");
$trTemp.append("<td>" + fileTable[i].UserId + "</td>");
//$trTemp.append("<td>" + fileTable[i].UploadDate + "</td>");
$trTemp.append("<td>" + "2020-10-27 9:55:22" + "</td>");
$("#TbData").append($trTemp);
$trTemp.appendTo("#TbData");
}
js方法:
$("#delete").click(function (check) {
var message = "";
$.ajax({
type: 'POST',
url: "/Attendance/DeleteFile/",
data: formData,
processData: false,
contentType: false,
success: function (data) {
if (data != null) {
fileTable = data.FileTableList;
}
}
})
这样会导致页面存在多个id为delete的按钮,这显然是不对的,id应该唯一
应该这样处理
var btnDelete=$("<input type='button' id='delete' value='删除'/> " );
btnDelete.click(function(){
//处理代码
});
var td=$("<td></td>");
td.append(btnDelete);
或者
$trTemp.append("<td>" + "<input type='button' value='删除' onclick='deleteFile(\"+fileTable[i].id+\")'/> " + "</td>");
//全局方法
function deleteFile(id){
//处理代码
}
怎么样呢
我试试
@Yimi依米: 你看看上面代码
如果你打算长期从事编程,还是先把基础的知识掌握好,最好在公司里有人指导,否则工作效率保证不了,技能提高会很慢。关键还是看你的自学能力和解决问题的能力,编程就要不断学习和解决问题。
另外,像这样的操作,你们公司应该要有专人负责写控件或是使用现成的比较好的控件,使用封装好的控件远比自己从头到尾写要好的多,因为随着需求的不断演化,你会发现问题会越来越多,所以一家好的公司是会考虑怎样合理安排人员,保证项目进度
https://www.runoob.com/jquery/jquery-tutorial.html
https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/
https://docs.microsoft.com/zh-cn/aspnet/mvc/overview/getting-started/introduction/getting-started
好像还是不行
运行出来:<input type="button" value="删除" onclick="deleteFile(239c2e7b-e35c-4636-96c1-d619ea51700d)">
是不是deleteFile()里面要加引号
@Yimi依米: 是的,加个单引号
@E行者: 大哥,这是好老的项目了。什么都得用最老的方法
@Yimi依米: 最起码得有人指导,要不然太费力了
@E行者: 不是二次开发,不知道是第几次开发,上一个提交代码的人都是12年的,早离职了
怎么调都不行,总有一个单引号变双引号
@Yimi依米:
"<td>" + "<input type='button' value='删除' onclick=\"deleteFile('"+fileTable[i].id+"')\"/> " + "</td>"
所以尽量不要拼接字符串,可以使用模板
https://www.cnblogs.com/isme-zjh/p/12018024.html
var content = $("#treeTableTpl").render(row);
$("#container").html(content);
动态追加的dom,这样绑定事件:$(document).on("click","#delete",function(){ //TODO });
楼上的老哥说的对,动态添加的元素,不能那样绑定事件
那怎么绑定啊
先给你看下生成表格的代码,你可以用es6的写法 ++++啥的有点过时且比较乱
是反引号
var x = `aaa${变量名}aaaa`
<table id="new_table"></table>
<script>
var ls = [['a', 1, 2], ['b', 2, 3]];
var table_header = ['FileName', 'NameCh', 'UserId'];
var table_str = ''
for (var i = 0; i < ls.length; i++) {
console.log(i);
if (i == 0) {
var tr_str = `
<tr>
<th>${table_header[0]}</th>
<th>${table_header[1]}</th>
<th>${table_header[2]}</th>
<th>删除键功能</th>
</tr>
<tr>
<th>${ls[i][0]}</th>
<th>${ls[i][1]}</th>
<th>${ls[i][2]}</th>
<th><input type='button' id='delete' value='删除'/> <th>
</tr>`
} else {
var tr_str = `
<tr>
<th>${ls[i][0]}</th>
<th>${ls[i][1]}</th>
<th>${ls[i][2]}</th>
<th><input type='button' id='delete' value='删除'/> <th>
</tr>`
}
table_str += tr_str
}
console.log(table_str)
document.querySelector('#new_table').innerHTML=table_str
</script>
然后下一步
添加删除,前端实现视觉效果就可以了
function delecttr(obj) {
var tr = obj.parentNode.parentNode;
tr.parentNode.removeChild(tr);
}
在上述代码优化
<table id="new_table"></table>
<script>
var ls = [['a', 1, 2], ['b', 2, 3]];
var table_header = ['FileName', 'NameCh', 'UserId'];
var table_str = ''
for (var i = 0; i < ls.length; i++) {
console.log(i);
if (i == 0) {
var tr_str = `
<tr>
<th>${table_header[0]}</th>
<th>${table_header[1]}</th>
<th>${table_header[2]}</th>
<th>删除键功能</th>
</tr>
<tr>
<td>${ls[i][0]}</td>
<td>${ls[i][1]}</td>
<td>${ls[i][2]}</td>
<td><input type='button' id='delete' onclick=delecttr(this) value='删除'/> <th>
</tr>`
} else {
var tr_str = `
<tr>
<td>${ls[i][0]}</td>
<td>${ls[i][1]}</td>
<td>${ls[i][2]}</td>
<td><input type='button' id='delete' onclick=delecttr(this) value='删除'/> <th>
</tr>`
}
table_str += tr_str
function delecttr(obj) {
var tr = obj.parentNode.parentNode;
tr.parentNode.removeChild(tr);
}
}
document.querySelector('#new_table').innerHTML = table_str
</script>
下一步要不要传后端,你可以在input标签上加上点标记自定义个属性,然后进行ajax传输,完善 delecttr方法