javascript - 仅显示选中复选框的文本区域,未选中时隐藏

标签 javascript jquery html checkbox

我想仅在选中复选框时显示文本区域,并在未选中复选框时隐藏文本区域。但是当选中某些复选框时,我当前的代码会显示所有文本区域。 textarea和checkbox是动态生成的,因此可以有任意数量的checkbox和textarea。

基本上,我想要做的是在复选框事件上切换文本区域。

$( document ).ready(function() {
	$(".with-us").hide();
    $(".with-other").hide();
    $('textarea[name="shopDescription"]').hide();
    $("#work-option :radio").change(function () {
    	var workType = $('input[name=work]:checked').val();
        if (workType == "wc") {
        	$(".with-other").hide();
            $(".with-us").show();
        } else if (workType == "woc") {
            $(".with-us").hide();
            $(".with-other").show();
        } else {
            $(".with-us").hide();
            $(".with-other").hide();
        }
    });
	$(document).on('click', 'input[name="shop"]', function () {
    	if (this.checked) {
        	$('textarea[name="shopDescription"]').show();
        } else {
        	$('textarea[name="shopDescription"]').hide();
        }
    });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<div id="work-option">
        <label>Show your work: </label>
        <div class="options">
            <input type="radio" name="work" value="wc">
            With us
		    <input type="radio" name="work" value="woc">
            With other
        </div>
    </div>
    <div class="with-us">
        <input type="hidden" name="withus" id="withus">
        <input id="work1" type="checkbox" name="shop" value="test1">
        Work 1
        <textarea id="test1Description" placeholder="Description" name="shopDescription"></textarea>

        <input id="work2" type="checkbox" name="shop" value="test2">
        Work 2
        <textarea id="test2Description" placeholder="Description" name="shopDescription"></textarea>

        <input id="work3" type="checkbox" name="shop" value="test3">
        Work 3
        <textarea id="test3Description" placeholder="Description" name="shopDescription"></textarea>

        <input id="work4" type="checkbox" name="shop" value="test4">
        Work 4
        <textarea id="test4Description" placeholder="Description" name="shopDescription"></textarea>

        <input id="work5" type="checkbox" name="shop" value="test5">
        Work 5
        <textarea id="test5Description" placeholder="Description" name="shopDescription"></textarea>

        <input id="work6" type="checkbox" name="shop" value="test6">
        Work 6
        <textarea id="test6Description" placeholder="Description" name="shopDescription"></textarea>
    </div>
    <div class="with-other">
        Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
        tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
        quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
        consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
        cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
        proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
    </div>

最佳答案

选择器 $('textarea[name="shopDescription"]').hide(); 选择所有文本区域。
相反,搜索 next() 文本区域:

$(document).ready(function() {
  $(".with-us").hide();
  $(".with-other").hide();
  $('textarea[name="shopDescription"]').hide();
  $("#work-option :radio").change(function() {
    var workType = $('input[name=work]:checked').val();
    if (workType == "wc") {
      $(".with-other").hide();
      $(".with-us").show();
    } else if (workType == "woc") {
      $(".with-us").hide();
      $(".with-other").show();
    } else {
      $(".with-us").hide();
      $(".with-other").hide();
    }
  });
  $(document).on('click', 'input[name="shop"]', function() {
    if (this.checked) {
      $(this).next('textarea').show();
    } else {
      $(this).next('textarea').hide();
    }
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<div id="work-option">
  <label>Show your work: </label>
  <div class="options">
    <input type="radio" name="work" value="wc"> With us
    <input type="radio" name="work" value="woc"> With other
  </div>
</div>
<div class="with-us">
  <input type="hidden" name="withus" id="withus">
  <input id="work1" type="checkbox" name="shop" value="test1"> Work 1
  <textarea id="test1Description" placeholder="Description" name="shopDescription"></textarea>

  <input id="work2" type="checkbox" name="shop" value="test2"> Work 2
  <textarea id="test2Description" placeholder="Description" name="shopDescription"></textarea>

  <input id="work3" type="checkbox" name="shop" value="test3"> Work 3
  <textarea id="test3Description" placeholder="Description" name="shopDescription"></textarea>

  <input id="work4" type="checkbox" name="shop" value="test4"> Work 4
  <textarea id="test4Description" placeholder="Description" name="shopDescription"></textarea>

  <input id="work5" type="checkbox" name="shop" value="test5"> Work 5
  <textarea id="test5Description" placeholder="Description" name="shopDescription"></textarea>

  <input id="work6" type="checkbox" name="shop" value="test6"> Work 6
  <textarea id="test6Description" placeholder="Description" name="shopDescription"></textarea>
</div>
<div class="with-other">
  Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor
  in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
</div>

替代方案

你可以稍微简化你的 jQuery:

$(document).on('click', 'input[name="shop"]', function() {
    $(this).next('textarea').toggle(this.checked);
});

关于javascript - 仅显示选中复选框的文本区域,未选中时隐藏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46599398/

相关文章:

php - 从 $.post() 获取数组

javascript - 在jquery中向上滚动时如何使类消失

jquery - 窗口加载下的滞后 jQuery

javascript - Node.JS 异步调用mySql

javascript - Android:第一次使用 Cordova 时, "pageshow"软键盘上的 JQuery-Mobile 未显示

php - 对数据库中数据的操作

javascript - for/if 循环根据 input::jquery 多次运行一个函数

javascript - jQuery - 是否可以有单独的 onHover 和 onClick 事件?

javascript - Android (Samsung S4) HTML5 视频暂停

javascript - Bootstrap Container 和 Container Fluid 有问题