如何显示隐藏在JQuery中使用nearest和find方法选择的元素?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何显示隐藏在JQuery中使用nearest和find方法选择的元素?相关的知识,希望对你有一定的参考价值。

我有复选框和文本区域的表单。如果选中复选框,我想显示textarea,如果不隐藏。这是我的例子:

$(document).on('click', '.dc-checkbox', setCheckboxVal);

function setCheckboxVal() {
  var fldCheckbox = $(this);
  var fldComment = $(this).closest('div').find('.dc-comment');
  console.log(fldComment);

  if (fldCheckbox.is(':checked')) {
    fldCheckbox.val(1);
    fldComment.show();

  } else {
    fldCheckbox.val(0);
    fldComment.hide();
  }
}
.dc-comment {
  display: none;
}
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>

<form id="myfrm" method="post">
  <div class="checkbox">
    <label for="checkbox1">
      <input type="checkbox" name="dc_status1" id="dc_status1" class="dc-checkbox"> Checkbox 1</label>
  </div>
  <div class="form-group dc-comment">
    <label for="comment1" class="pull-left">Comment:</label>
    <textarea class="form-control" rows="2" name="dc_comment1" id="dc_comment1"></textarea> </div>
  <div class="checkbox">
    <label for="checkbox2"><input type="checkbox" name="dc_status2" id="dc_status2" class="dc-checkbox" value="1"> Checkbox 2</label>
  </div>
  <div class="form-group dc-comment">
    <label for="comment2" class="pull-left">Comment:</label>
    <textarea class="form-control" rows="2" name="dc_comment2" id="dc_comment2"></textarea>
  </div>
  <div class="checkbox">
    <label for="checkbox4"><input type="checkbox" name="dc_status4" id="dc_status4" class="dc-checkbox"> Checkbox 3</label>
  </div>
  <div class="form-group dc-comment">
    <label for="comment4" class="pull-left">Comment:</label>
    <textarea class="form-control" rows="2" name="dc_comment4" id="dc_comment4"></textarea>
  </div>
</form>

正如你可以看到我检查复选框注释textarea仍然没有显示。在这种情况下,我不确定.closest().find()是否支持show / hide。如果您知道实现这一目标的方法,请告诉我。谢谢。

答案

$(this).closest('div')找到第一个父div,在这种情况下是一个类checkbox - .find(..)然后查看div的孩子。由于div class=checkbox div没有div class=dc-comment作为它的孩子,它没有找到它。

.dc-comment.checkbox的兄弟姐妹(同级/同一父母)。

改为.next().nextAll(".dc-comment").first()

不要使用.next(".dc-comment"),除非你知道它的作用,因为它可能会破坏(如果它匹配则获得下一个,而不是匹配的下一个)。

更新的代码段:

$(document).on('click', '.dc-checkbox', setCheckboxVal);

function setCheckboxVal() {
  var fldCheckbox = $(this);
  var fldComment = $(this).closest('div').nextAll('.dc-comment').first();
  //console.log(fldComment);

  if (fldCheckbox.is(':checked')) {
    fldCheckbox.val(1);
    fldComment.show();
  } else {
    fldCheckbox.val(0);
    fldComment.hide();
  }
}
.dc-comment {
  display: none;
}
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>

<form id="myfrm" method="post">
  <div class="checkbox">
    <label for="checkbox1">
      <input type="checkbox" name="dc_status1" id="dc_status1" class="dc-checkbox"> Checkbox 1</label>
  </div>
  <div class="form-group dc-comment">
    <label for="comment1" class="pull-left">Comment:</label>
    <textarea class="form-control" rows="2" name="dc_comment1" id="dc_comment1"></textarea> </div>
  <div class="checkbox">
    <label for="checkbox2"><input type="checkbox" name="dc_status2" id="dc_status2" class="dc-checkbox" value="1"> Checkbox 2</label>
  </div>
  <div class="form-group dc-comment">
    <label for="comment2" class="pull-left">Comment:</label>
    <textarea class="form-control" rows="2" name="dc_comment2" id="dc_comment2"></textarea>
  </div>
  <div class="checkbox">
    <label for="checkbox4"><input type="checkbox" name="dc_status4" id="dc_status4" class="dc-checkbox"> Checkbox 3</label>
  </div>
  <div class="form-group dc-comment">
    <label for="comment4" class="pull-left">Comment:</label>
    <textarea class="form-control" rows="2" name="dc_comment4" id="dc_comment4"></textarea>
  </div>
</form>

以上是关于如何显示隐藏在JQuery中使用nearest和find方法选择的元素?的主要内容,如果未能解决你的问题,请参考以下文章

如何在我的情况下使用 jQuery 隐藏和显示?

如何使用jQuery在三个或更多条件下显示和隐藏元素?

如何使用jQuery和CSS隐藏元素?

求教:jquery如何操作隐藏的DOM元素

如何在html中创建一个复选框,以使用jQuery隐藏/显示表中的多个列

如何修改此 jQuery 以在下拉列表中动态显示和隐藏相关选择选项?