Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 收集一个表行,其中包含要通过json发送的文本输入_Javascript_Jquery_Json - Fatal编程技术网

Javascript 收集一个表行,其中包含要通过json发送的文本输入

Javascript 收集一个表行,其中包含要通过json发送的文本输入,javascript,jquery,json,Javascript,Jquery,Json,我一直在到处寻找答案和解决方案,但我还是被卡住了 我试图让它将表行数据存储在只选中该行的复选框中,并包含一个输入文本框。目前,它将生成包含我需要的所有信息的警报,但它似乎做了两件我需要帮助的事情: 表的第一行将提醒pquantity输入,但其后的每一行仅显示第一行的pquantity,而不显示该行的pquantity。 如果您选中一个复选框并获取数据,然后选中另一个行复选框,它将向该行和第一行发出警报。在alert和console.log中。我只需要该行提醒/控制台json一次。 该应用程序的最

我一直在到处寻找答案和解决方案,但我还是被卡住了

我试图让它将表行数据存储在只选中该行的复选框中,并包含一个输入文本框。目前,它将生成包含我需要的所有信息的警报,但它似乎做了两件我需要帮助的事情:

表的第一行将提醒pquantity输入,但其后的每一行仅显示第一行的pquantity,而不显示该行的pquantity。 如果您选中一个复选框并获取数据,然后选中另一个行复选框,它将向该行和第一行发出警报。在alert和console.log中。我只需要该行提醒/控制台json一次。 该应用程序的最终目标是让用户查看动态数据表,输入数量,然后单击复选框,将json数据发送到php,然后通过EPL发送到Zebra打印机

我尝试过各种jQuery事件更改/单击/打开等,但没有成功。 我在网上试过几个例子,但它们都想迭代每一行,每一行或每一行都不考虑输入字段

html:

非常感谢您的帮助


谢谢。

标签的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);
});