javascript - 第二次复选框不起作用

标签 javascript jquery html checkbox

我创建了两个 javascript。

1.当我单击复选框时,输入字段会出现,当我未选中时,输入字段会消失。

2.第二个是当我单击“添加更多项目”时,所有字段都会再次创建。

现在的问题是,当创建第二个及更多项目时,复选框不起作用。

HTML 代码:

<div class="container">
    <div class="row">
        <div class="col-lg-12 col-md-12">
            <div data-role="dynamic-fields">
                <div class="form-inline">
                    <div class="row">
                        <div class="col-md-3">
                            <div class="form-group">
                                <input type="text" class="form-control" id="Name1" placeholder="Food Name" name="Name1" style="width:120%;" required data-rule-minlength="2">
                                <label class="sr-only" for="field-name">Name</label>
                            </div>
                        </div>
                        <div class="col-md-3">
                            <div class="form-group">
                                <input type="text" class="form-control" id="field-value" placeholder="Description" style="width:120%;" required>
                                <label class="sr-only" for="field-value">Description</label>
                            </div>
                        </div>
                        <div class="col-md-2">
                            <div class="form-group">
                                <select id="select1" name="select1" style="width:130%;" class="form-control" required>
                                    <option value=""></option>
                                    <option value="1">Food Type 1</option>
                                    <option value="2">Food Type 2</option>
                                    <select>
                                        <label for="select1">Food Type</label>
                            </div>
                        </div>
                        <div class="col-md-4">
                            <div class="form-group">
                                <input type="text" value="" class="form-control" data-role="tagsinput" placeholder="Tags" />
                                <label class="sr-only" for="field-tags">Tags</label>
                            </div>
                        </div>
                    </div>
                    <div class="row">
                        <div class="form-inline">
                            <div class="col-md-3">
                                <div class="form-group">
                                    <input type="text" class="form-control" id="Name1" placeholder="Price" name="price" style="width:120%;" required data-rule-minlength="2">
                                    <label class="sr-only" for="field-name">Price</label>
                                </div>
                            </div>
                            <div class="col-md-2">
                                <div class="checkbox checkbox-styled">
                                    <label><em>Half Plate Price</em>
                                        <input type="checkbox" value="" id="trigger2" name="question"> </label>
                                </div>
                            </div>
                            <div class="col-md-1">
                                <div id="hidden_fields2">
                                    <input type="text" id="hidden_field2" name="hidden" placeholder="Price" class="form-control" style="width:140%;margin-left:-35px;height: 29px;margin-top: 24px;font-weight: 380;font-size: 16px;line-height: 1.5;"> </div>
                            </div>
                            <div class="col-md-3">
                                <div class="checkbox checkbox-styled">
                                    <label><em>Quarter Plate Price</em>
                                        <input type="checkbox" value="" id="trigger" name="question"> </label>
                                </div>
                            </div>
                            <div class="col-md-1">
                                <div id="hidden_fields">
                                    <input type="text" id="hidden_field" name="hidden" placeholder="Price" class="form-control" style="width:140%;margin-left:-100px;height: 29px;margin-top: 24px;font-weight: 380;font-size: 16px;line-height: 1.5;"> </div>
                            </div>
                        </div>
                    </div>
                    <button class="btn btn-icon-toggle btn-delete" data-toggle="tooltip" data-placement="bottom" title="Delete Field" data-role="remove"> <span class="md md-delete"></span> </button>
                    <button class="btn btn-primary" data-toggle="tooltip" data-placement="bottom" title="Add More Field" data-role="add"> Add More Items </button>
                </div>
                <!-- /div.form-inline -->
            </div>
            <!-- /div[data-role="dynamic-fields"] -->
        </div>
        <!-- /div.col-md-12 -->
    </div>
    <div class="form-group">
        <button type="button" name="submit" href="#" class="btn ink-reaction btn-raised btn-primary">Submit Items</button>
    </div>
    <!--end .form-group -->
</div>

复选框 Js:

<script type="text/javascript">
$(function() {
    // Get the form fields and hidden div
    var checkbox = $("#trigger");
    var hidden = $("#hidden_fields");
    hidden.hide();
    checkbox.change(function() {
        if (checkbox.is(':checked')) {
            // Show the hidden fields.
            hidden.show();
        } else {
            // Make sure that the hidden fields are indeed
            // hidden.
            hidden.hide();
            $("#hidden_field").val("");
        }
    });
});
$(function() {
    var checkbox = $("#trigger2");
    var hidden = $("#hidden_fields2");
    hidden.hide();
    checkbox.change(function() {
        if (checkbox.is(':checked')) {
            // Show the hidden fields.
            hidden.show();
        } else {
            hidden.hide();
            $("#hidden_field2").val("");
        }
    });
});
</script>

添加更多项目JS:

$(function() {
    // Remove button 
    $(document).on('click', '[data-role="dynamic-fields"] > .form-inline [data-role="remove"]', function(e) {
        e.preventDefault();
        $(this).closest('.form-inline').remove();
    });
    // Add button 
    $(document).on('click', '[data-role="dynamic-fields"] > .form-inline [data-role="add"]', function(e) {
        e.preventDefault();
        var container = $(this).closest('[data-role="dynamic-fields"]');
        new_field_group = container.children().filter('.form-inline:first-child').clone();
        new_field_group.find('input').each(function() {
            $(this).val('');
        });
        container.append(new_field_group);
    });
});

页面截图:This is a page enter image description here enter image description here enter image description here

最佳答案

这里有几个问题:

  • 您正在克隆元素,然后尝试通过相同的 ID 访问它们(您应该使用类)
  • 您的函数不仅仅针对单击的元素,而是针对带有选择器的任何元素。
  • 您正在克隆元素,因此需要将点击事件绑定(bind)到非克隆元素:例如通过 $(document).on

我已经更新了您的一些代码来演示我正在谈论的内容。在 html 中,我在 trigger2hidden_​​fields2 元素中添加了类,并在隐藏字段中添加了 display:none 样式,以便它们被隐藏默认值:

<div class="col-md-2">
    <div class="checkbox checkbox-styled">
        <label><em>Half Plate Price</em>
            <input type="checkbox" value="" class="trigger2" id="trigger2" name="question"> </label>
    </div>
</div>
<div class="col-md-1">
    <div id="hidden_fields2" class="hidden_fields2" style="display:none;">
        <input type="text" id="hidden_field2" name="hidden" placeholder="Price" class="form-control" style="width:140%;margin-left:-35px;height: 29px;margin-top: 24px;font-weight: 380;font-size: 16px;line-height: 1.5;"> </div>
</div>  

在 JavaScript 中,我已将函数更改为从 $(document).on 事件绑定(bind)运行,并使用元素类而不是 id。我还更改了代码,因此它仅影响您更改的复选框和最近的隐藏元素:

$(function() {
     $(document).on('change', '.trigger2', function(){
        var checkbox = $(this);
        var parent = checkbox.closest('.form-inline');
        var hidden = parent.find(".hidden_fields2");
         hidden.hide();
        if (checkbox.is(':checked')) {
            // Show the hidden fields.
            hidden.show();
        } else {
            hidden.hide();
            $(".hidden_field2").val("");
        }
    });
});

您需要对其他函数和输入使用相同的逻辑。

关于javascript - 第二次复选框不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43002151/

相关文章:

javascript - 在 Jquery 中从 JSON 获取数据

html - 使 CSS Grid 填充 CSS Flexbox 列中的所有可用空间

jquery - 是否可以使用 css/jquery 在其他容器侧水平显示 div(html 元素)的一部分?

javascript - 自动日期重复选项卡

javascript - 如何将变量从 Node js(commonjs)导出到普通的 javascript(vanilla js)?

javascript - 如何在Javascript中计算多个动态输入字段的总和?

javascript - 如何保存输入复选框值的存储数组?

javascript - 可点击标签在 IE 8 中不起作用

javascript - 我的代码在输出下面不断返回 undefined

javascript - 如果我在 bootstrap colorpicker 中复制输入字段,我如何获得颜色值。有人能帮我吗?