Javascript 收集一个表行,其中包含要通过json发送的文本输入
我一直在到处寻找答案和解决方案,但我还是被卡住了 我试图让它将表行数据存储在只选中该行的复选框中,并包含一个输入文本框。目前,它将生成包含我需要的所有信息的警报,但它似乎做了两件我需要帮助的事情: 表的第一行将提醒pquantity输入,但其后的每一行仅显示第一行的pquantity,而不显示该行的pquantity。 如果您选中一个复选框并获取数据,然后选中另一个行复选框,它将向该行和第一行发出警报。在alert和console.log中。我只需要该行提醒/控制台json一次。 该应用程序的最终目标是让用户查看动态数据表,输入数量,然后单击复选框,将json数据发送到php,然后通过EPL发送到Zebra打印机 我尝试过各种jQuery事件更改/单击/打开等,但没有成功。 我在网上试过几个例子,但它们都想迭代每一行,每一行或每一行都不考虑输入字段 html: 非常感谢您的帮助Javascript 收集一个表行,其中包含要通过json发送的文本输入,javascript,jquery,json,Javascript,Jquery,Json,我一直在到处寻找答案和解决方案,但我还是被卡住了 我试图让它将表行数据存储在只选中该行的复选框中,并包含一个输入文本框。目前,它将生成包含我需要的所有信息的警报,但它似乎做了两件我需要帮助的事情: 表的第一行将提醒pquantity输入,但其后的每一行仅显示第一行的pquantity,而不显示该行的pquantity。 如果您选中一个复选框并获取数据,然后选中另一个行复选框,它将向该行和第一行发出警报。在alert和console.log中。我只需要该行提醒/控制台json一次。 该应用程序的最
谢谢。标签的id应该唯一地标识文档中的标签。在文档中,您似乎多次使用id=plabel和id=pquantity 将类标记命名为plabel和pquantity,而不是执行$plabel,并在当前行上执行查找 例如,您可以执行以下操作
$(this).find(".pquantity");
这应该给出该特定行的数量,而不是第一行的数量。我不确定为什么要在更改处理程序中绑定单击处理程序,但这就是为什么会收到多个警报。每次单击复选框时,都会绑定一个新的单击处理程序 此处没有单击处理程序: 此外,元素ID必须是唯一的。这就是为什么$'pquantity'.val;正在返回未定义的。我会给它一个类并选择$tds.find'.pquantity'
我还建议您提供tds类,或者使用类将文本包装在跨距中,而不是按索引选择,因为索引可能很脆弱。我想您需要这样的内容: 删除了内部单击处理程序的绑定,您无论如何都不需要它,这就是导致多个警报的原因
但是!。。。。这还远远不够完整,就像上面的建议一样,ID名称应该是唯一的,您也有包含ID plabel和class plabel的输入,非常混乱……这里有一点不同的尝试:
$("table").on("click", "tr td input.plabel", function () {
if ($(this).is(':not(:checked)')) {
return false;
}
var obj = {};
$(this).closest("tr").find("td").each(function (index) {
var columnName = $("table th").eq(index).text();
obj[columnName] = ($(this).find("input").length) ? $(this).find("input").val() : $(this).text();
});
console.log(obj);
});
这为我做到了,并且删除了多个警报。非常感谢你的帮助!!我也清理了身份证。再次感谢!谢谢大家的帮助!!你们都很摇滚!!这是我最后一把小提琴:
$(this).find(".pquantity");
$('#item_table input.plabel').on('change', function () {
if ($(this).is(':not(:checked)')) {
return false;
}
var $tds = $(this).closest('tr').find('td'),
fsono = $tds.eq(0).text(),
fenumber = $tds.eq(1).text(),
fac = $tds.eq(2).text();
fpartno = $tds.eq(3).text();
fpartrev = $tds.eq(4).text();
fquantity = $tds.eq(5).text();
fcusrchr1 = $tds.eq(6).text();
pquantity = $('#pquantity').val();
// do something with productId, product, Quantity
alert('fsono: ' + fsono + '\nfenumber: ' + fenumber + '\nfac: ' + fac + '\nfpartno: ' + fpartno + '\nfpartrev: ' + fpartrev + '\nfquantity: ' + fquantity + '\nfcusrchr1: ' + fcusrchr1 + '\npquantity: ' + pquantity);
});
$("table").on("click", "tr td input.plabel", function () {
if ($(this).is(':not(:checked)')) {
return false;
}
var obj = {};
$(this).closest("tr").find("td").each(function (index) {
var columnName = $("table th").eq(index).text();
obj[columnName] = ($(this).find("input").length) ? $(this).find("input").val() : $(this).text();
});
console.log(obj);
});