写个循环取表里的值

-一个大坑 2018-11-28 09:19:33

这样写,有两个问题
1.第一个园区不是input,取不到值,要怎么办?
2.所有的一起取,导致不知道从哪开始是第二行,后台保存不好做(虽然可以根据长度,但是加一列或者减一列时,改的时候容易忘改这个)

var array2 = $("#goodsTableView .tdValue");
var dataArray2 = new Array();
array2.each(function(){
var data={};
data[$(this).attr("name")]=$(this).val();
dataArray2.push(data);
});
...全文
288 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
winzond 2018-12-01
  • 打赏
  • 举报
回复
引用 8 楼 -一个大坑 的回复:
[quote=引用 7 楼 winzond 的回复:]
设置了dataType为json,返回的数据已经自动转换成对象了,其实你自己编写的后台,应该知道对象的内容并取值的,如果搞不清楚的话,可以console.log()输出看看,如果觉得太复杂,那就再转换成字符串查看结构

我已经自己写类了,下次试试
我想把前台转成类要怎么写?
var appFORM={application_date:'2018/11/30 09:24:01',rno:'TF20181130005',deliver_goods_person:'555',applicant_id:'201001',deptid:'MZV885',take_date:'2018/11/06',take_time:'02:00:00',turnover_type:'廠外周轉',transport_type:'單趟'}; 这样传值可以
var objForm='';
$("#appFormView .checkEmpty").each(function(){
objForm +=$(this).attr("id").replace('edit_txt_','')+':'+$(this).val()+',';
});
 var objForm='';
                $("#appFormView .checkEmpty").each(function(){
                    objForm +=$(this).attr("id").replace('edit_txt_','')+':'+$(this).val()+',';
                }); 
                objForm=objForm.substring(0,objForm.length-1);
var appFORM='{'+objForm+'}';我拼接就不行了[/quote]自己拼字符串容易出错,最好是添加到对象,然后把对象转换成字符串。

var arr = new Array();
for (var i = 0; i < 10; i++) {
var newdata = {
index: i,
value:"第"+i+"个数据"
}
arr.push(newdata);
}
JSON.stringify(arr);
类似这样
-一个大坑 2018-11-30
  • 打赏
  • 举报
回复
引用 7 楼 winzond 的回复:
设置了dataType为json,返回的数据已经自动转换成对象了,其实你自己编写的后台,应该知道对象的内容并取值的,如果搞不清楚的话,可以console.log()输出看看,如果觉得太复杂,那就再转换成字符串查看结构

我已经自己写类了,下次试试
我想把前台转成类要怎么写?
var appFORM={application_date:'2018/11/30 09:24:01',rno:'TF20181130005',deliver_goods_person:'555',applicant_id:'201001',deptid:'MZV885',take_date:'2018/11/06',take_time:'02:00:00',turnover_type:'廠外周轉',transport_type:'單趟'}; 这样传值可以
var objForm='';
$("#appFormView .checkEmpty").each(function(){
objForm +=$(this).attr("id").replace('edit_txt_','')+':'+$(this).val()+',';
});
 var objForm='';
                $("#appFormView .checkEmpty").each(function(){
                    objForm +=$(this).attr("id").replace('edit_txt_','')+':'+$(this).val()+',';
                }); 
                objForm=objForm.substring(0,objForm.length-1);
var appFORM='{'+objForm+'}';我拼接就不行了
-一个大坑 2018-11-29
  • 打赏
  • 举报
回复
引用 3 楼 winzond 的回复:
刚刚看了你提的另一个问题,大致意思是差不多的,在面向对象编程的语言中,建议深刻理解一下对象是什么?为什么这个语言被称为面向对象编程语言?这个我也没法说清楚,得自己去多看几遍书,慢慢理解。你说你不想建结构类,这样就不是面向对象编程了,将来会后悔的。建议:
一、你全部弄成对象,这样才能发挥面向对象编程语言的强大功能,将来增加功能会方便很多,出错的概率会小很多,结构更清晰。所以,直接解析字符串并不是明智之选,其实,你有JSON后,http://www.bejson.com/convert/json2csharp/可以自动帮你生成结构的,稍微改一改就行了。
二、我看你好像是同名文件前台访问后台,我之前也这样用过,但后面发现问题太多了,根本解决不过来,建议你直接使用ajax,后台用一般处理程序.ashx文件处理。
同名文件后台一个只能使用表态方法的限制就足以让你望而却步了,我已经弃用了,就不跟你说了,网上能搜索到的。后台接收前台ajax传送的字符串用Request对象的Form属性获取。
也许你目前会认为这种方法很麻烦,但是,做项目时,你一定会走上这条路。

.ashx没用过。我用的是ajax抛数据给后台,黏贴json自动生成类我知道,Request.Form["action"].ToString()我也知道。
但是我现在已经把传的值进行拼接了,用浏览器调试,复制不出json,弹出也是12个[object]

$.ajax({
type: 'post',
url: 'WH15.aspx/SaveAppForm',
data: JSON.stringify({appForm:appFormArr, goodsList:goodsTableArr, strAlterCarTypeExplain:strAlterCarTypeExplain, strCTSize:strCTSize}),
async: false,
contentType: 'application/json; charset=utf-8',
dataType: 'json',
success: function (data) {
alert('成功');
},
error: function (err) {
alert('發生錯誤,請聯繫IT!');
}
})


winzond 2018-11-29
  • 打赏
  • 举报
回复
设置了dataType为json,返回的数据已经自动转换成对象了,其实你自己编写的后台,应该知道对象的内容并取值的,如果搞不清楚的话,可以console.log()输出看看,如果觉得太复杂,那就再转换成字符串查看结构
-一个大坑 2018-11-28
  • 打赏
  • 举报
回复
引用 1 楼 winzond 的回复:
1.在td元素加上不同的类(它可以没有CSS,只是为了区分)区分开单元格内是什么元素,获取值时,根据不同的类去查找元素获取;
2.获取tr元素的包装集,然后each,处理完第一行,自然就处理第二行了

var arr = new Array();
$("tr").each(function () {
var arr1 = new Array();
$(this).find("td").each(function () {
if ($(this).hasClass("ipt")) { //判断是否有ipt类,有就表示里面是input元素,需要或者它的val
var val = $(this).find("input").val();
arr1.push(val);
} else {
//查找其它元素获取值
};
//也可以直接判断是否包含input元素,if($(this).find("input").length>0),看你喜欢
});
arr.push(arr1);
});
console.log(arr);

我改了一下,分别标成tdText和tdInput,我在后台接收值怎么写?我也是用的.net,下面有table的代码

var goodsTableArr=new Array();
$('#goodsTableView').find('tr:gt(0)').each(function(){
var arrTr=new Array();
$(this).find('.tdText,.tdInput').each(function(){
if ($(this).hasClass("tdText")) {
var data={};
data[$(this).attr("name")]=$(this).text();
}else{
var data={};
data[$(this).attr("name")]=$(this).val();
}
arrTr.push(data);
})
goodsTableArr.push(arrTr);
})


function newTr(objThis){
var park=objThis.closest('tr').find('p[name=TE_park]').text();
var parkTD='<td class="td1"><p name="TE_park" class="tdText">'+park+'</p></td>';
var newPlantTD='<td class="td1"><input type="button" name="TE_Btn_NewPlant" value="新增計費廠別"></input></td>';
var plantTD='<td class="td1"><select name="TE_Dorp_Plant" style="width: 120px;" class="tdInput"></select></td>';
var newBuildingTD='<td class="td1"><input type="button" name="TE_Btn_NewBuilding" value="新增Building"></input></td>';
var buildingTD='<td class="td1"><select name="TE_Dorp_Building" style="width: 120px;" class="tdInput"></select></td>';
var receiveGoodsPersonTD='<td class="td1"><input type="text" name="TE_Txt_ReceiveGoodsPerson" value="" class="tdInput"></input></td>';
var newGoodsTD='<td class="td1"><input type="button" name="TE_Btn_NewGoods" value="新增物品"></input></td>';
var goodsSeqTD='<td class="td1"><p name="TE_goodsSeq">'+1+'</p></td>';
var deleteTD='<td class="td1"><input type="button" name="TE_Btn_Delete" value="Delete"></input></td>';
var goodsNameTD='<td class="td1"><input type="text" name="TE_Txt_GoodsName" value="" style="width: 80px;" class="tdInput"></input></td>';
var palletNoTD='<td class="td1"><input type="text" name="TE_Txt_PalletNo" value="" style="width: 60px;" class="tdInput"></input></td>';
var cartonNoTD='<td class="td1"><input type="text" name="TE_Txt_CartonNo" value="" style="width: 60px;" class="tdInput"></input></td>';
var remarkTD='<td class="td1"><input type="text" name="TE_Txt_Remark" value="" class="tdInput"></input></td>';
var newTr='<tr class="body">'+parkTD + newPlantTD + plantTD + newBuildingTD + buildingTD + receiveGoodsPersonTD + newGoodsTD + goodsSeqTD
+ deleteTD + goodsNameTD + palletNoTD + cartonNoTD + remarkTD +'</tr>';
objThis.closest('tr').after(newTr);

$("#layer2").height('auto');
}
winzond 2018-11-28
  • 打赏
  • 举报
回复
1.在td元素加上不同的类(它可以没有CSS,只是为了区分)区分开单元格内是什么元素,获取值时,根据不同的类去查找元素获取;
2.获取tr元素的包装集,然后each,处理完第一行,自然就处理第二行了

var arr = new Array();
$("tr").each(function () {
var arr1 = new Array();
$(this).find("td").each(function () {
if ($(this).hasClass("ipt")) { //判断是否有ipt类,有就表示里面是input元素,需要或者它的val
var val = $(this).find("input").val();
arr1.push(val);
} else {
//查找其它元素获取值
};
//也可以直接判断是否包含input元素,if($(this).find("input").length>0),看你喜欢
});
arr.push(arr1);
});
console.log(arr);
winzond 2018-11-28
  • 打赏
  • 举报
回复
向客户端返回数据Response.Write("some JSON String")
winzond 2018-11-28
  • 打赏
  • 举报
回复
引用 3 楼 winzond 的回复:
刚刚看了你提的另一个问题,大致意思是差不多的,在面向对象编程的语言中,建议深刻理解一下对象是什么?为什么这个语言被称为面向对象编程语言?这个我也没法说清楚,得自己去多看几遍书,慢慢理解。你说你不想建结构类,这样就不是面向对象编程了,将来会后悔的。建议:
一、你全部弄成对象,这样才能发挥面向对象编程语言的强大功能,将来增加功能会方便很多,出错的概率会小很多,结构更清晰。所以,直接解析字符串并不是明智之选,其实,你有JSON后,http://www.bejson.com/convert/json2csharp/可以自动帮你生成结构的,稍微改一改就行了。
二、我看你好像是同名文件前台访问后台,我之前也这样用过,但后面发现问题太多了,根本解决不过来,建议你直接使用ajax,后台用一般处理程序.ashx文件处理。
同名文件后台一个只能使用表态方法的限制就足以让你望而却步了,我已经弃用了,就不跟你说了,网上能搜索到的。后台接收前台ajax传送的字符串用Request对象的Form属性获取。
$.post(
"Post.aspx", //这个是后台接收的文件名
{
action: "getUser", //值可以是JSON字符串,这里只是向你演示一下后台如何获取
//JS可以很容易将一个对象(这里又提到对象了,真的很重要)转换成JSON字符串,可以百度一下
name: “username”,
password: “userpassword”
},
function (reVaul) {
//somecode
});


string strAction = Request.Form["action"].ToString();
string strName = Request.Form["name"].ToString();
string strPassword = Request.Form["password"].ToString();

也许你目前会认为这种方法很麻烦,但是,做项目时,你一定会走上这条路。
表态方法改为静态方法
winzond 2018-11-28
  • 打赏
  • 举报
回复
刚刚看了你提的另一个问题,大致意思是差不多的,在面向对象编程的语言中,建议深刻理解一下对象是什么?为什么这个语言被称为面向对象编程语言?这个我也没法说清楚,得自己去多看几遍书,慢慢理解。你说你不想建结构类,这样就不是面向对象编程了,将来会后悔的。建议:
一、你全部弄成对象,这样才能发挥面向对象编程语言的强大功能,将来增加功能会方便很多,出错的概率会小很多,结构更清晰。所以,直接解析字符串并不是明智之选,其实,你有JSON后,http://www.bejson.com/convert/json2csharp/可以自动帮你生成结构的,稍微改一改就行了。
二、我看你好像是同名文件前台访问后台,我之前也这样用过,但后面发现问题太多了,根本解决不过来,建议你直接使用ajax,后台用一般处理程序.ashx文件处理。
同名文件后台一个只能使用表态方法的限制就足以让你望而却步了,我已经弃用了,就不跟你说了,网上能搜索到的。后台接收前台ajax传送的字符串用Request对象的Form属性获取。
$.post(
"Post.aspx", //这个是后台接收的文件名
{
action: "getUser", //值可以是JSON字符串,这里只是向你演示一下后台如何获取
//JS可以很容易将一个对象(这里又提到对象了,真的很重要)转换成JSON字符串,可以百度一下
name: “username”,
password: “userpassword”
},
function (reVaul) {
//somecode
});


string strAction = Request.Form["action"].ToString();
string strName = Request.Form["name"].ToString();
string strPassword = Request.Form["password"].ToString();

也许你目前会认为这种方法很麻烦,但是,做项目时,你一定会走上这条路。

87,993

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧