读取动态添加的复选框值

Posted

技术标签:

【中文标题】读取动态添加的复选框值【英文标题】:reading dynamicaly added check box value 【发布时间】:2020-12-25 16:42:47 【问题描述】:
<head>
    <title>jQuery Add & Remove Dynamically Input Fields in php</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
</head>

<body>
    <h1>jQuery Add & Remove Dynamically Input Fields in PHP</h1>
    <form method="post" action="">
        <div class="form-group fieldGroup">
            <div class="input-group">
                <input type="text" name="phno[]" class="form-control" placeholder="Enter No" />
                <input type="checkbox" name="cdr[]" class="checkbox-inline cdr" />
                <input type="checkbox" name="caf[]" class="checkbox-inline caf" />
                <div class="input-group-addon">
                    <a href="javascript:void(0)" class="btn btn-success addMore"><span class="glyphicon glyphicon glyphicon-plus" aria-hidden="true"></span> Add</a>
                </div>
            </div>
        </div>
        <input type="submit" name="submit" class="btn btn-primary" value="SUBMIT" />
    </form>
    <!-- copy of input fields group -->
    <div class="form-group fieldGroupCopy" style="display: none;">
        <div class="input-group">
            <input type="text" name="phno[]" class="form-control" placeholder="Enter No" />
            <input type="checkbox" name="cdr[]" class="checkbox-inline cdr" />
            <input type="checkbox" name="caf[]" class="checkbox-inline caf" />
            <div class="input-group-addon">
                <a href="javascript:void(0)" class="btn btn-danger remove"><span class="glyphicon glyphicon glyphicon-remove" aria-hidden="true"></span> Remove</a>
            </div>
        </div>
    </div>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.0.0-rc1/jquery.min.js"></script>
    <script>
    $(document).ready(function() 
        //group add limit
        var maxGroup = 10;

        //add more fields group
        $(".addMore").click(function() 
            if ($('body').find('.fieldGroup').length < maxGroup) 
                var fieldhtml = '<div class="form-group fieldGroup">' + $(".fieldGroupCopy").html() + '</div>';
                $('body').find('.fieldGroup:last').after(fieldHTML);
             else 
                alert('Maximum ' + maxGroup + ' groups are allowed.');
            
        );

        //remove fields group
        $("body").on("click", ".remove", function() 
            $(this).parents(".fieldGroup").remove();
        );

    );
    </script>
</body>

在上面的代码中,我得到了复选框的值,但与文本字段的值不对应

请帮忙

我需要作为数据输出,例如 如果我输入 abcd 然后选中一个与之关联的复选框,我需要的输出是 abcd-value of checkbox clicked 这将重复输入组的数量

【问题讨论】:

【参考方案1】:

我假设“cdrtxt”与“.cdr”在同一个节点中?

在“.cdr”上使用 .parent()

$(document).on('click', '.cdr', function() 
     alert(1);
     $(this).parent().find('.cdrtxt').val("1");
);

【讨论】:

实际上我的问题是在提交时我得到了复选框的数组,但我找不到对应于名为“phono”的文本文件 这在读取未定义的 cdrtxt 值时不起作用 那是因为 ".val("1")" 设置了 "1" 的值。 “.val()”将获取值。 api.jquery.com/val【参考方案2】:

这一行代码有几个问题:

$("this").find('.cdrtxt').val("1");
    没有$("this") 这样的东西。至少如果您的 HTML 中没有非标准的 &lt;this&gt; 标记。当你想引用接收到事件的节点并将它包装在一个 jQuery 对象中时,你应该使用$(this) 您的 HTML 代码中没有 cdrtxt 类。

您的解决方案是搜索单击复选框的文本输入兄弟。比如:

$(this).siblings('input[type=text]').val('something');

【讨论】:

【参考方案3】:
<input type="text" name="phno[]" class="form-control" placeholder="Enter No" />
<input type="checkbox" name="cdr[]" class="checkbox-inline cdr" />

无法使用此命名方案正确关联文本输入字段值和复选框值。

文本字段总是会导致表单提交数据集中的条目,即使它们是空的 - 复选框不会,它们只会在实际选中时创建一个条目。

如果您有四次上述字段组合,但您只选中了第一个和第三个复选框,那么您将获得 $_POST['phno'] 作为一个包含四个文本值的数组,索引从 0 到 3,而 $_POST['cdr'] 将仅包含 两个 复选框值(您没有在此处明确指定一个,因此这些复选框将提交值 on),索引为 0 和 1。

根据这些索引,现在无法判断,哪些复选框被选中了。如果您改为检查第三个和第四个,您仍然会在索引01 下获得这些值。

这里需要预先指定索引:

<input type="text" name="phno[0]" class="form-control" placeholder="Enter No" />
<input type="checkbox" name="cdr[0]" class="checkbox-inline cdr" />

0 需要在下一组变成1,以此类推。

那么选中的复选框将获得与文本字段对应的索引。

$_POST['cdr'] 中的索引中仍然存在“漏洞” - 如果您检查了第一个(索引 0)和第四个(索引 3),那么之后会设置 $_POST['cdr'][0]$_POST['cdr'][3]。 但是如果你遍历$_POST['phno'],它包含从0到3的所有索引,那么你可以使用该索引值来检查$_POST['cdr']中的对应索引是否被设置。

因此您将不得不修改您的 JavaScript 部分,即简单地“克隆”那些现有的行,以便它设置正确的字段名称,包括索引。

【讨论】:

【参考方案4】:

复选框的问题是,如果未选中,则不会与表单一起发布。如果您选中复选框并发布表单,您将在 $_POST 变量中获得复选框的值,如果未选中,则不会为 $_POST 变量分配任何值。为了知道选中了哪个复选框,为其分配一个不同的值。此代码可能会解决您的问题

<?php

if(isset($_POST['submit']))

if(isset($_POST['checkbox']))
echo 'Checkbox: ';
print_r($_POST['checkbox']);




if(isset($_POST['text']))
$text=$_POST['text'];
echo 'Textbox: ';
print_r($text);



  ?>

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
</head>
<body>
<form method="POST" action="tests.php">
<input type="checkbox" name="checkbox[]" class="check"  value="1">
<br>
<input type="checkbox" name="checkbox[]" class="check"  value="2">
<br>
<input type="checkbox" name="checkbox[]" class="check"  value="3">
<br>
<input type="text" name="text[]" class="text">
<br>

<br>
<input type="submit" name="submit">
</form>
<button id="add">ADD</button>
</body>
<script>
$(document).ready(function()

$('#add').on('click',function()

var breaks="<br>"
var checkbox="<br>";
var textbox="<br><input type='text' name='text[]' class='text'>";
var check_length=$('.check').length;

console.log(check_length);
for(var i=check_length+1;i<check_length+4;i++)
   
    checkbox=checkbox+"<input type='checkbox' name='checkbox[]' class='check' value='" + i + "'><br>";
    


$('input[type="text"]').last().after(checkbox,textbox);
);
    );
</script>

</html>

【讨论】:

以上是关于读取动态添加的复选框值的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 JSP 在复选框中动态包含值?

jquery multiselect下拉列表复选框怎么动态添加option并赋值

Javascript添加动态HTML的字符串问题

向动态创建的复选框 jQuery 添加验证

使用 Angular,如何在点击时动态添加组件? (不止一个)

怎么在动态添加select下拉框中 选择一个默认的option