【问题标题】:How to target one checkbox and based on its value show input fields如何定位一个复选框并根据其值显示输入字段
【发布时间】:2019-05-09 09:06:51
【问题描述】:

function selectOpenField() {
    $("input[name='vrije_velden']").on('click', function() {

            var $box = $(this);
            if ($box.is(":checked")) {

                var group = "input:checkbox[name='" + $box.attr("name") + "']";
                $(group).prop("checked", false);
                $box.prop("checked", true);

                var val = $(this).val();

                $("input[name='vrije_velden']").each(function(key, value){
                    var $thisValue = $(value).val();
                    if ($thisValue === val) {
                        $('#'+val).slideDown();
                    } else {
                        $(group).slideUp();
                    }
                });
            } else {
                $box.prop("checked", false);
                $(group).slideUp();
            }
    });
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="custom-control custom-checkbox">
     <input type="checkbox" class="custom-control-input" id="checkbox" 
    value="checkboxHolder" name="vrije_velden">
    <label class="custom-control-label" for="checkbox">Checkbox</label>
 </div>
 <div class="custom-control custom-checkbox">
    <input type="checkbox" class="custom-control-input" id="radio" 
    value="radioBoxHolder" name="vrije_velden">
    <label class="custom-control-label" for="radio">Radio</label>
</div>
<div class="custom-control custom-checkbox">
    <input type="checkbox" class="custom-control-input" id="input" 
    value="inputBoxHolder" name="vrije_velden">
    <label class="custom-control-label" for="input">Input</label>
</div>

我创建了 3 个复选框,但是只能选中一个复选框而不是多个复选框。都很好。

我的问题

我根据已选中的复选框的值显示某些 div,这是可行的,但是当我单击另一个复选框以显示 div B 时,div A 不会消失。第二个问题是,当我单击一个复选框并再次取消选中该复选框时,该 div 也仍然存在。

这部分是我最近尝试的一段代码

var val = $(this).val();
                $("input[name='vrije_velden']").each(function(key, value){
                    var $thisValue = $(value).val();
                    if ($thisValue === val) {
                        $('#'+val).slideDown();
                    } else {
                        $(group).slideUp();
                    }
                });

我希望达到的目标

  • 3 个复选框,只能选中一个(单选按钮类型),但用户也应该能够取消选中(这就是我不使用单选按钮的原因)
  • 当我单击复选框 A 时,应该显示 div A,当我单击复选框 B 时,复选框 A 变为未选中状态,并且 div A 回到 display: none,但 div B 显示(等等)复选框的值也是 div 的 ID。
  • 当我点击复选框 A 时,应该显示 div A,但是当我取消选中复选框 A 时,div A 应该再次为 display: none

提前致谢。

【问题讨论】:

  • 问题:那些 div 会在哪里?在这些复选框旁边,还是在它们下方或远离它们?根据它可以有多种解决方案
  • 它们位于所有复选框的下方。所以在你在我的帖子中看到的所有 HTML 代码下面。

标签: javascript jquery html


【解决方案1】:

如果我正确理解了您的问题,应该这样做:

在这段代码中,如果你选中一个复选框,它下面的div会出现,其他的div会消失,如果你不选中它,它就会消失。

所以基本上只能看到一个div。

$(function(){
$("input[name='vrije_velden']").on("click",function(){
if($(this).is(":checked")){
$("input[name='vrije_velden']").not($(this)).prop("checked",false);
var val=$(this).attr("value");
$(".div").each(function(){
if($(this).attr("id")==val){
$(this).removeClass("none");
}
else{
$(this).addClass("none");
}
});
}
else{
$(".div").addClass("none");
}
});
});
.none{
display:none;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="custom-control custom-checkbox">
     <input type="checkbox" class="custom-control-input" id="checkbox" 
    value="checkboxHolder" name="vrije_velden">
    <label class="custom-control-label" for="checkbox">Checkbox</label>

 </div>
 <div class="custom-control custom-checkbox">
    <input type="checkbox" class="custom-control-input" id="radio" 
    value="radioBoxHolder" name="vrije_velden">
    <label class="custom-control-label" for="radio">Radio</label>
 
</div>
<div class="custom-control custom-checkbox">
    <input type="checkbox" class="custom-control-input" id="input" 
    value="inputBoxHolder" name="vrije_velden">
    <label class="custom-control-label" for="input">Input</label>

</div>


    <div class="div none" id="checkboxHolder">
Checkbox div
</div>
<br>
   <div class="div none" id="radioBoxHolder">
Radio div
</div>
<br>
    <div class="div none" id="inputBoxHolder">
Input div
</div>

【讨论】:

  • 请问您为什么选择自定义控制输入类作为选择器?尽管您的代码可以正常工作并且没有错,但我的 3 个 div 都在复选框下方。所以它是:'checkbox' - 'checkbox' - 'checkbox' 然后是 DIV。
  • 我更新了我的答案,我错过了你问题中的一些细节,如果现在更好了,请告诉我。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-12
  • 1970-01-01
  • 2023-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多