【问题标题】:jquery disable textbox using checkbox (multiple textbox with checkbox)jquery 使用复选框禁用文本框(带有复选框的多个文本框)
【发布时间】:2017-04-25 07:52:01
【问题描述】:

每当用户选中复选框时,我都会尝试禁用文本框。

我已经用一个文本框和复选框完成了。

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

这是我目前的输出。

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

我想要做的是,当一个复选框被选中时,文本框仍然保持禁用状态,直到我取消选中其各自的复选框。

这是我目前编写的代码。

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');
});

先谢谢了!

【问题讨论】:

    标签: javascript jquery html checkbox


    【解决方案1】:

    删除以下行:

    $("#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()

    【讨论】:

    • 您甚至可以将.parent().find("input.input-text").siblings("input.input-text") 切换,因为它处于同一级别(see documentation here
    • @DouwedeHaan - 是的。但我实际上更喜欢.closest(...).find(...),而不是.parent().find(...).siblings(),因为这样如果您决定修改HTML 以在任一元素周围添加额外的包装元素(或将任一元素移动到其标签内),JS 将继续无需修改即可工作。
    • 我同意!我认为你甚至应该改变你的答案,因为那样会更可靠!
    【解决方案2】:

    试试这个,你通过设置 disabled = false 来启用所有

    $(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);
        }
        else if($(this).not(":checked")){
            $(this).parent().find("input.input-text").attr("disabled", false);
        }
        //console.log('working');
    });
    

    【讨论】:

      猜你喜欢
      • 2010-11-10
      • 1970-01-01
      • 2018-07-15
      • 1970-01-01
      • 1970-01-01
      • 2019-04-30
      • 2013-12-30
      • 1970-01-01
      • 2022-01-09
      相关资源
      最近更新 更多