清除输入元素后启用/禁用按钮

时间:2019-07-17 19:17:04

标签: jquery html html-input

我的格式如下:

$('.search__input').keyup(function() {
          var empty = false;
            $('.search__input').each(function() {       
                if ($(this).val().length == 0) {
                    empty = true;
                }
            });
        
            if (empty) {
                $('.search__button').attr('disabled', 'disabled');
            } else {
                $('.search__button').removeAttr('disabled');
            }
      });
    });
<form class="search" action="my_url" autocomplete="on">
      <input type="search" class="search__input">
      <button type="submit" class="search__button">Search</button>
    </form>

我正在使用以下代码通过rest api检索自动完成功能:

$(document).ready(function() {
  $(".search__input").autocomplete({
    delay: 250,
    source: function(request, response) {
      var suggestURL = "my_url";
      suggestURL = suggestURL.replace('%QUERY', request.term);
      $.ajax({
        method: "GET",
        dataType: 'json',
        url: suggestURL,
        success: function (data) {
           response(data);
        }
      });
    }
  });

但是,除了键盘输入之外,还有其他方法可以使输入元素为空。例如,chrome在输入元素中有一个x按钮,可用于清除其内容。处理此类案件的正确方法是什么?如果有任何原因导致输入为空时触发了一个动作,我会很好。

3 个答案:

答案 0 :(得分:1)

由于您的表单提交了搜索,因此,如果您在输入中添加了必填项,那么当搜索字段为空时,您将无法点击“提交”:

  <input type="search" class="search__input" required />

答案 1 :(得分:1)

将代码放入命名函数中。然后,您可以从keyup处理程序以及其他修改输入的地方调用它。

function enable_disable()() {
  var empty = false;
  $('.search__input').each(function() {
    if ($(this).val().length == 0) {
      empty = true;
    }
  });

  if (empty) {
    $('.search__button').attr('disabled', 'disabled');
  } else {
    $('.search__button').removeAttr('disabled');
  }
}

$('.search__input')
  .keyup(enable_disable)
  .autocomplete({
    delay: 250,
    source: function(request, response) {
      var suggestURL = "my_url";
      suggestURL = suggestURL.replace('%QUERY', request.term);
      $.ajax({
        method: "GET",
        dataType: 'json',
        url: suggestURL,
        success: function(data) {
          response(data);
        }
      });
    },
    close: enable_disable
  });

顺便说一句,如果您使用AJAX来获取建议,则只需将URL用作source:选项的值即可,而不必编写自己的$.ajax()代码。

答案 2 :(得分:0)

也许您可以使用.keyup来代替.onchange,它会在输入字段的内容更改时随时触发(但是您可能必须离开输入字段才能检测到更改)