在复选框和文本框上使用相同的功能切换可见性[重复]

Posted

技术标签:

【中文标题】在复选框和文本框上使用相同的功能切换可见性[重复]【英文标题】:Toggling visibility using same function on checkbox and text box [duplicate] 【发布时间】:2019-01-03 13:07:10 【问题描述】:

我有一个函数可以根据输入显示和隐藏元素。选中复选框或输入文本框中的任何文本时,将显示一个特定的消息框。当复选框未选中或文本框中没有文本时,消息应该消失。我设法实现了文本框的功能以及复选框功能,以显示消息但不切换。有人可以帮我弄清楚为什么取消选中复选框时消息没有被隐藏吗?

非常感谢。

笔 - https://codepen.io/anon/pen/yqoRrQ

HTML

<div class="container">
  <div class="form-group checkWrap">
    <label for="exampleInputEmail1">Email address</label>
    <input type="text" class="form-control checkToggle" id="exampleInputEmail1" aria-describedby="emailHelp" placeholder="Enter email">

    <div class="elHidden alert alert-success">
      This is some stuff
    </div>
  </div>

  <div class="form-group form-check checkWrap">
    <input type="checkbox" class="form-check-input checkToggle" id="exampleCheck2">
    <label class="form-check-label" for="exampleCheck2">Check me out</label>

    <div class="elHidden alert alert-success">
      This is some stuff
    </div>
  </div>

  <div class="form-group form-check checkWrap">
    <input type="checkbox" class="form-check-input checkToggle" id="exampleCheck1">
    <label class="form-check-label" for="exampleCheck1">Check me out</label>

    <div class="elHidden alert alert-success">
      This is some stuff
    </div>
  </div>
</div>

CSS

.elHidden 显示:无;

JS

   $('.checkToggle').on('change keyup', function () 
      if ($(this).is(':checked') || $(this).val()) 
        $(this).parents('.checkWrap').children('.elHidden').show();
      
      else 
        $(this).parents('.checkWrap').children('.elHidden').hide();
      
   );

【问题讨论】:

不,不是! @zenoo 你正在寻找一种方法来判断 jQuery 中是否选中了复选框。 不是!您是否正确阅读了我的问题?我正在使用相同的功能来检查复选框和文本框。一个正在工作,另一个正在部分工作。开枪前请检查笔! 您在问题中提供的代码不包含任何文本框。更新您的代码以匹配您的请求。人们不应该打开非现场页面来回答。 第一个输入是一个文本框,虽然它是一个电子邮件字段,但在本例中功能相同。 【参考方案1】:

您可以使用.is() 来检查当前元素的类型,并检查复选框是否被选中,例如:

$('.checkToggle').on('change input', function() 
  var condition;
  var message = $(this).closest('.checkWrap').find('.alert');

  if ($(this).is(':checkbox')) 
    condition = $(this).is(':checked');
   else 
    condition = $(this).val();
  

  condition ? message.removeClass('elHidden') : message.addClass('elHidden');
);
.elHidden 
  display: none;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div class="container">
  <div class="form-group checkWrap">
    <label for="exampleInputEmail1">Email address</label>
    <input type="email" class="form-control checkToggle" id="exampleInputEmail1" aria-describedby="emailHelp" placeholder="Enter email">

    <div class="elHidden alert alert-success">
      This is some stuff
    </div>
  </div>

  <div class="form-group form-check checkWrap">
    <input type="checkbox" class="form-check-input checkToggle" id="exampleCheck2">
    <label class="form-check-label" for="exampleCheck2">Check me out</label>

    <div class="elHidden alert alert-success">
      This is some stuff
    </div>
  </div>

  <div class="form-group form-check checkWrap">
    <input type="checkbox" class="form-check-input checkToggle" id="exampleCheck1">
    <label class="form-check-label" for="exampleCheck1">Check me out</label>

    <div class="elHidden alert alert-success">
      This is some stuff
    </div>
  </div>
</div>

【讨论】:

还是不开心,扎卡里亚。 更新了我的帖子@Jayonline 不客气,兄弟...恭喜你,你获得了Vote up privilege 考虑使用它;) 干杯扎卡利亚!我肯定会的 很高兴我能帮助兄弟,Downvoters 无处不在,别担心,忽略他们继续前进......【参考方案2】:
Try this !

$('.checkToggle').on('change keyup', function () 
      
      
      type = $(this).attr("type");
    
      if(type=="checkbox")      
         if ($(this).is(':checked'))                      $(this).parents('.checkWrap').children('.elHidden').show();
      
      else 
        $(this).parents('.checkWrap').children('.elHidden').hide();
      
      else      
        if ($(this).val())                      $(this).parents('.checkWrap').children('.elHidden').show();
      
      else 
        $(this).parents('.checkWrap').children('.elHidden').hide();
      
      
      
      
   );
.container margin-top: 30px;
.elHidden display: none;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="container">
  <div class="form-group checkWrap">
    <label for="exampleInputEmail1">Email address</label>
    <input type="email" class="form-control checkToggle" id="exampleInputEmail1" aria-describedby="emailHelp" placeholder="Enter email">
  
    <div class="elHidden alert alert-success">
      This is some stuff
    </div>
  </div>
  
  <div class="form-group form-check checkWrap">
    <input type="checkbox" class="form-check-input checkToggle" id="exampleCheck2">
    <label class="form-check-label" for="exampleCheck2">Check me out</label>
    
    <div class="elHidden alert alert-success">
      This is some stuff
    </div>
  </div>
  
  <div class="form-group form-check checkWrap">
    <input type="checkbox" class="form-check-input checkToggle" id="exampleCheck1">
    <label class="form-check-label" for="exampleCheck1">Check me out</label>
    
    <div class="elHidden alert alert-success">
      This is some stuff
    </div>
  </div>
</div>

【讨论】:

如果输入不为空,复选框将不起作用。 非常感谢 Akilesh - 这解决了我的问题。愿意解释为什么 $(this).is(':checked') 不起作用? 实际上,我刚刚注意到您已经对输入文本 ID 进行了硬编码,因为我有多个文本框,所以我想避免这种情况?一旦我使用通用格式 $(this).val 它就不起作用了。 :( @Jayonline 现在,我将动态的条件语句分开,现在修复了吗!

以上是关于在复选框和文本框上使用相同的功能切换可见性[重复]的主要内容,如果未能解决你的问题,请参考以下文章

根据组合框选择切换表单上其他字段的可见性 - MS Access

根据多个复选框切换 div 可见性

在对话框中切换一组字段的可见性

淡入/淡出的简单切换不适用于过渡、不透明度和可见性

Angularjs 切换 div 可见性

将图标浮动在文本框上而不使用绝对位置 [重复]