javascript - jquery 使用复选框禁用文本框(带复选框的多个文本框)

标签 javascript jquery html checkbox

我试图在用户选中复选框时禁用文本框。

我用单个文本框和复选框完成了。

我现在卡住了,如果用户可以添加多个带复选框的文本框怎么办?

到目前为止,这是我的输出:

enter image description here

我的输出是,每当我勾选复选框时,禁用的 attr 只会将一个文本框切换到另一个文本框。

我希望当一个复选框被选中时,文本框仍然保持禁用状态,直到我取消选中其相应的复选框。

这是我目前编写的代码。

HTML

<div id="operator_properties">
    <label for="operator_title">Operator's title:  </label> <input type="text" id="operator_title">
    <br /><br />
    <button id="append" class="btn btn-primary">Add Connectors</button>
    <br /><br />
    <div class="col-md-10">
        <div id="parent"></div>
    </div>
    <div class="clearfix"></div>
    <hr />
    <div class="col-md-12">
        <button class="btn btn-success" id="operator_btn">
            Confirm
        </button>
    </div>
    <div class="clearfix"></div>
</div>

Jquery

$(function () {
    var count = 1;
    $('#append').click(function () {
        $('#parent').append('<div class="operator"> <div class="row"> <div class="col-md-2"><input type="text" id="input' + count + '" class="input-text" placeholder="Input' + count + ' title"><br /> <input type="checkbox" id="disableinput' + count + '" class="disable-input" /><label for="disableinput' + count + '" style="vertical-align: middle;"> &nbsp; Disable</label> </div> &nbsp <div class="col-md-3"><input type="text" id="output' + count + '" class="output-text" placeholder="Output' + count + ' title"> <a href="#" id="' + count + '" class="remove">Remove</a> <br /> <input type="checkbox" id="disableoutput' + count + '" class="disable-output" /><label for="disableoutput' + count + '"style="vertical-align: middle;"> &nbsp; Disable</label></div></div></div>');
        count++;
    });
});

$(document).on('click', '.remove', function () {
    $(this).closest("div.operator").remove();
});

$(document).on('change', '.disable-input', function () {
    $("#parent").find("input.input-text").attr("disabled", false);
    if ($(this).is(":checked"))
        $(this).parent().find("input.input-text").attr("disabled", true);
    //console.log('working');
});

最佳答案

删除以下行:

$("#parent").find("input.input-text").attr("disabled", false);

...因为这会启用 #parent 元素中的所有输入。

您似乎已经知道如何使用 $(this).parent(...).find(...) 来获取与单击项目相关的文本框,因此只需修改它代码:

$(document).on('change', '.disable-input', function () {
    $(this).parent().find("input.input-text").prop("disabled", this.checked);
});

请注意,您可以简单地使用 this.checked 而不是 $(this).is(":checked")) - 更高效且更易于阅读。此外,使用 .prop() 而不是 .attr() 进行此类动态状态更改。

关于javascript - jquery 使用复选框禁用文本框(带复选框的多个文本框),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43604738/

相关文章:

javascript - 使用计算机键盘按单词而不是字符删除

javascript - 在 jquery 函数中从日历中获取选定的日期

jquery - 基于鼠标位置的CSS背景图片位置

javascript - 如何使用 jquery 更改克隆下拉列表的 id

html - Bootstrap 4 移动导航栏不会崩溃

javascript - 使用 Javascript 将新列表元素添加到无序列表

javascript - 表单重置后,Chrome onChange 事件不会针对已清除的字段触发

javascript - 如何在 THREE.JS 中将对象移动到其他对象位置?

javascript - "You may need an appropriate loader to handle this file type"错误

javascript - jQuery 周期2 : move through slides on scroll