【问题标题】:Only the first checkbox value is being added to my table只有第一个复选框值被添加到我的表中
【发布时间】:2014-11-02 18:43:02
【问题描述】:

无论我在复选框列表中检查了多少项目,当我查看要添加一行的表时,只会将第一个选中的复选框的值添加到我的表中。我正在尝试遍历每个复选框并获取要插入的每个复选框的值,但它似乎不起作用。任何线索我搞砸了?

在我的 jquery 中,我正在运行一个 if 语句,以防止在未选中框时将 undefined 添加到我的表中。

这是一个 jsfiddle 演示我在做什么:http://jsfiddle.net/22L9x006/

$(document).on('click', 'input:checkbox[name=certsToValid]', function() {
$newTableRow = '<tr><td><p>' + $('[name=certsToValid]:checked').val() + '</p></td><td><input type="text" placeholder="Credential #..." class="certInput" /></td><td><p>$5.00</p></td><td><div class="removeRow"></div></td></tr>';
$(this).attr('value');
if($.each($('input:checkbox[name=certsToValid]').is(':checked')) && $(this) != undefined) {
    $('.certSelections').append($newTableRow); 
}
});

【问题讨论】:

  • dude 给你的复选框起个名字更简单也创建一个 js fiddle
  • @Anonymous.X 我添加了一个jsfiddle,谢谢

标签: javascript jquery arrays checkbox html-table


【解决方案1】:

我刚刚调整了您的Fiddle,因此将带有单击复选框值的选项添加到表中。调整就是改变

$newTableRow = '<tr><td><p>' + $('[name=certsToValid]:checked').val() + ...

进入

$newTableRow = '<tr><td><p>' + $(this).val() + ...

这不是完整的解决方案,因为我猜你例如想要在未选中复选框时删除一行,目前每次单击复选框都会添加一个新行,但我认为您可以从这里开始解决。

【讨论】:

  • 感谢您帮助我指明了正确的方向,您帮助我开始思考这个问题的正确方式
【解决方案2】:

目前尚不清楚您的目标是什么,但编写代码的正确方法是:

$(document).on('change', ':checkbox[name=certsToValid]', function() {
    $(this).filter(':checked').each(function() {
        $newTableRow = '<tr><td><p>' + this.value + '</p></td><td><input type="text" placeholder="Credential #..." class="certInput" /></td><td><p>$5.00</p></td><td><div class="removeRow">REMOVE</div></td></tr>';
        $('p:contains(' + this.value + ')','.certSelections tbody').length ||
            $('.certSelections tbody').append($newTableRow);
    });
});
$(document).on('click', 'div.removeRow', function() {
    $(this).closest('tr').remove();
});

DEMO

如果您可以澄清您要达到的目标,那么可以改进此答案,以更好地指导您实现目标。

【讨论】:

  • 谢谢,我想我想太多了,这让我感到很困惑。感谢您的帮助,因为这正是我想要的。
【解决方案3】:

这是对 PeterKA 答案的扩展。代码与他的相同。我只添加了一种“过滤”以避免重复行。

 $(document).on('change', ':checkbox[name=certsToValid]', function () {
        $(this).filter(':checked').each(function () {
            $newTableRow = '<tr><td><p>' + this.value + '</p></td><td><input type="text" placeholder="Credential #..." class="certInput" /></td><td><p>$5.00</p></td><td><div class="removeRow">REMOVE</div></td></tr>';

            var optionValue = this.value;

            var added = false;

            $('.certSelections td:first-child p').each(function (index) {

                if ($(this).text() === optionValue) {
                    added = true;
                }
            });

            //only add if it's not found in the table  
            if (!added) {

                $('.certSelections tbody').append($newTableRow);
            }
        });

    });

Fiddle

【讨论】:

  • 谢谢@jyrkim,这太完美了。我开始考虑添加这样的过滤器来完成结帐过程的这一步。
猜你喜欢
  • 1970-01-01
  • 2014-07-19
  • 2021-01-30
  • 2011-06-19
  • 1970-01-01
  • 2013-08-09
  • 1970-01-01
  • 2013-08-05
  • 2015-05-16
相关资源
最近更新 更多