问题篇:修改了一个因为"后端给前端提供的aid,需要分配给多个'需要aid的方法'使用,而出现的aid分配不均,只能给第一个所接收,而后面两个不能出现效果的BUG"{解决方法:给多个'需要aid的方法'不同的id值,再把循环查找后端数据的aid,都个分配给他们每个id,使他们每个都有aid,就解决了,具体看代码解析}(已经解决bug)
问题图片:
原来的BUG代码:
/**展示用户收货地址数据列表*/
function showAddressList() {
$("#address-list").empty();
$.ajax({
url: "/addresses",
type: "get",
//data:
dataType: "JSON",
success: function (json) {
if (json.state == 200) {
var list = json.data;
console.log(list);//调试用
for (var i = 0; i < list.length; i++) {
//先写一个var tr = ''; 然后去上面的地址展示中找一个tr标签复制粘贴到单引号里面,再删去多余的制表符
var tr = '<tr>\n' +
'<td>#{tag}</td>\n' +
'<td>#{name}</td>\n' +
'<td>#{address}</td>\n' +
'<td>#{phone}</td>\n' +
'<td><a onclick="updateAddress(#{aid})" class="btn btn-xs btn-info"><span class="fa fa-edit"></span> 修改</a></td>\n' +
'<td><a onclick="deleteAddressByAid(#{aid})" class="btn btn-xs add-del btn-info"><span class="fa fa-trash-o"></span> 删除</a></td>\n' +
'<td><a onclick="setDefault(#{aid})" class="btn btn-xs add-def btn-default">设为默认</a></td>\n' +
'</tr>';
//href="updateAddress.html" --跳转页面
//下面用正则表达式更改字符串,上面的#{tag}#{name}等等只
//是占位符,没有任何意义,我也可以把#{tag}写成任何想写的东西
//replace的第一个参数/占位符/g可以,"占位符"也可以
tr = tr.replace(/#{tag}/g, list[i].tag);
tr = tr.replace(/#{name}/g, list[i].name);
tr = tr.replace("#{address}", list[i].address);
tr = tr.replace("#{phone}", list[i].phone);
tr = tr.replace("#{aid}", list[i].aid); //给这个表单,的"修改、删除、设置默认"赋值aid
$("#address-list").append(tr);
}
//用hide方法将第一个收货地址的"设为默认"元素隐藏,.add-def:eq(0)表
//现示第一个class为add-def的标签,这样就可以保证隐藏的是第一个收货地址
$(".add-def:eq(0)").hide();
} else {
<!--这个其实永远不会执行,因为没有编写
异常,控制层返回的状态码永远是OK-->
alert("用户收货地址数据加载失败")
}
}
});
}
解决思路:
-
问题: tr = tr.replace("#{aid}", list[i].aid); // 一个aid不能给这个表单,的"修改、删除、设置默认"(三个按键)都赋值aid
-
所以解决方法很简单,分别给"修改、删除、设置默认"都赋值一个aid,就解决了
-
他们都需要aid,但是又不能只给一个aid,就都赋值,就解决问题啦
修改后的代码块:
/**展示用户收货地址数据列表*/
function showAddressList() {
$("#address-list").empty();
$.ajax({
url: "/addresses",
type: "get",
//data:
dataType: "JSON",
success: function (json) {
if (json.state == 200) {
var list = json.data;
console.log(list);//调试用
for (var i = 0; i < list.length; i++) {
//先写一个var tr = ''; 然后去上面的地址展示中找一个tr标签复制粘贴到单引号里面,再删去多余的制表符
var tr = '<tr>\n' +
'<td>#{tag}</td>\n' +
'<td>#{name}</td>\n' +
'<td>#{address}</td>\n' +
'<td>#{phone}</td>\n' +
'<td><a onclick="updateAddress(#{aid_updateAddress})" class="btn btn-xs btn-info"><span class="fa fa-edit"></span> 修改</a></td>\n' +
'<td><a onclick="deleteAddressByAid(#{aid_deleteAddressByAid})" class="btn btn-xs add-del btn-info"><span class="fa fa-trash-o"></span> 删除</a></td>\n' +
'<td><a onclick="setDefault(#{aid_setDefault})" class="btn btn-xs add-def btn-default">设为默认</a></td>\n' +
'</tr>';
//href="updateAddress.html" --跳转页面
//下面用正则表达式更改字符串,上面的#{tag}#{name}等等只
//是占位符,没有任何意义,我也可以把#{tag}写成任何想写的东西
//replace的第一个参数/占位符/g可以,"占位符"也可以
tr = tr.replace(/#{tag}/g, list[i].tag);
tr = tr.replace(/#{name}/g, list[i].name);
tr = tr.replace("#{address}", list[i].address);
tr = tr.replace("#{phone}", list[i].phone);
tr = tr.replace("#{aid_updateAddress}", list[i].aid); //给这个表单的 --"修改"按键-- 赋值aid
tr = tr.replace("#{aid_deleteAddressByAid}", list[i].aid);//给这个表单的 --"删除"按键-- 赋值aid
tr = tr.replace("#{aid_setDefault}", list[i].aid); //给这个表单的 --"设置默认"按键-- 赋值aid
$("#address-list").append(tr);
}
//用hide方法将第一个收货地址的"设为默认"元素隐藏,.add-def:eq(0)表
//现示第一个class为add-def的标签,这样就可以保证隐藏的是第一个收货地址
$(".add-def:eq(0)").hide();
} else {
<!--这个其实永远不会执行,因为没有编写
异常,控制层返回的状态码永远是OK-->
alert("用户收货地址数据加载失败")
}
}
});
}