【问题标题】:How to toggle a class of an input if it's not empty with jQuery?如果 jQuery 不为空,如何切换输入类?
【发布时间】:2017-11-29 21:56:40
【问题描述】:

使用 Bootstrap 4。

我有四个文本输入,如果 any 的文本输入包含 any 值,我想为按钮添加一个类。

单击按钮时,我想清除输入值,并从按钮中删除类。

我有一半在工作(点击按钮成功清除所有输入)。

我的代码如下;

 $(document).ready(function() {
      $("#filterRecords input").on("keyup change", function() {
        $("#filterRecords input").each(function() {
          var element = $(this);
          if (element.val().length > 0) {
            $('#resetFilter').addClass('btn-outline-primary');
          }
        });
      });
      $('#resetFilter').click(function() {
        $('input[type=text]').val('').change();
      });
    });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="row filterRecords">
      <div class="input-group col-xs-6 col-sm-6 col-md-3 mb-3">
        <input type="text" id="searchName" class="form-control" placeholder="Search Name">
      </div>
      <div class="input-group col-sm-6 col-md-3 mb-3">
        <input type="text" id="searchLang" class="form-control" placeholder="Search Language">
      </div>
      <div class="input-group col-sm-6 col-md-3 mb-3">
        <input type="text" id="yearMin" class="form-control start" placeholder="Search Start Year">
      </div>
      <div class="input-group col-sm-6 col-md-3 mb-3">
        <input type="text" id="yearMax" class="form-control end" placeholder="Search End Year">
      </div>
    </div>
    <div class="row justify-content-md-center">
      <div class="col-md-auto">
        <button class="btn btn-sm btn-default" type="button" id="resetFilter">Reset Filters</button>
        <hr>
      </div>
    </div>

Fiddle link.

任何帮助将不胜感激。

【问题讨论】:

  • 小提琴链接?我没有看到一个
  • 你的 filterRecords 是一个类而不是一个 ID 。证明 &lt;div class="row filterRecords"&gt;$("#filterRecords input") 改变这个,你的代码就可以工作了
  • @Andreas 停止了复制粘贴的废话,他清楚地说明了他想要什么
  • When the button is clicked, I would like to clear the input values, and remove the class from the button. I have half of it working (clicking button successfully clears all inputs). 有什么不清楚的地方?
  • I have four text inputs, if any of the text inputs contain any values, i'd like to add a class to a button.I have half of it working (clicking button successfully clears all inputs). 暗示了他想要和缺少的东西@Andreas

标签: javascript jquery html twitter-bootstrap


【解决方案1】:

首先,filterRecords 是一个类,而不是 id,所以你的选择器不正确。

除此之外,您的逻辑的问题是它只会在输入值更改时添加类。当没有输入值输入时,您还需要有一些逻辑来删除它。

您可以通过使用 toggleClass() 以及基于填充输入数量的布尔值来做到这一点,如下所示:

$(document).ready(function() {
  var $inputs = $(".filterRecords input");      
  $inputs.on("input", function() {
    var $filled = $inputs.filter(function() { return this.value.trim().length > 0; });
    $('#resetFilter').toggleClass('btn-outline-primary', $filled.length > 0);
  });
  
  $('#resetFilter').click(function() {
    $inputs.val('').trigger('input');
  });
});
.btn-outline-primary {
  color: #C00;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="row filterRecords">
  <div class="input-group col-xs-6 col-sm-6 col-md-3 mb-3">
    <input type="text" id="searchName" class="form-control" placeholder="Search Name">
  </div>
  <div class="input-group col-sm-6 col-md-3 mb-3">
    <input type="text" id="searchLang" class="form-control" placeholder="Search Language">
  </div>
  <div class="input-group col-sm-6 col-md-3 mb-3">
    <input type="text" id="yearMin" class="form-control start" placeholder="Search Start Year">
  </div>
  <div class="input-group col-sm-6 col-md-3 mb-3">
    <input type="text" id="yearMax" class="form-control end" placeholder="Search End Year">
  </div>
</div>
<div class="row justify-content-md-center">
  <div class="col-md-auto">
    <button class="btn btn-sm btn-default" type="button" id="resetFilter">Reset Filters</button>
    <hr>
  </div>
</div>

还要注意input 的使用,而不是keyup change 的组合。

【讨论】:

  • 这正是我要找的@Rory McCrossan - 也感谢您的精彩解释:)
  • 除非我弄错了,在旧版浏览器上更改比输入更可靠?
  • @Deckerz 它在所有 IE9 中都受支持。
  • 啊,很公平,我认为输入是 ie11+ 的事件
【解决方案2】:

这样

$(document).ready(function() {
  $("#filterRecords input").on("keyup change", function() {
    $("#filterRecords input").each(function() {
      var element = $(this);
      if (element.val().length > 0) {
        $('#resetFilter').addClass('btn-outline-primary');
      }
    });
  });
  $('#resetFilter').click(function() {
    $("#filterRecords**")[0].reset();
    $(this).removeClass('btn-outline-primary');
  });
});

【讨论】:

  • @pedram 我同意他应该添加一个解释,但你不需要他添加一个工作演示
  • 这里很普通,一个工作演示帮助 OP 确定哪个答案是好的、有效的等等......@CarstenLøvboAndersen
  • 并且当OP添加sn-p时,很容易复制sn-p并添加自己的代码!就是这样
猜你喜欢
  • 2018-09-20
  • 1970-01-01
  • 2012-04-17
  • 2011-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-20
  • 1970-01-01
相关资源
最近更新 更多