【问题标题】:Check if inputs and select is not empty and enable button检查输入和选择是否不为空并启用按钮
【发布时间】:2016-02-11 13:48:58
【问题描述】:

我有许多输入的表格列表,并在过滤器选项中进行选择。检查此字段是否有内容的目标(例如输入不为空,并且 select 已选择选项)。我不明白如何使它与这些元素中的一个以上一起工作,因为现在如果两个输入具有值并且一个输入要清除,尽管其中一个输入具有值,但它会将按钮设置为禁用。帮我处理一下。

function buttonStatus() {
  var buttonDisable = function(){
    $('input[type="submit"]').attr('disabled', true)
  },
      buttonEnable = function(){
        $('input[type="submit"]').attr('disabled', false);
      }

  $('input').on('keyup change', function(){
    var inputText = $.trim($('input').val())
    if(inputText.length > 0 || $('select option').is(':selected') && $('select option:selected').val() != 0) {
      buttonEnable()
    }
    else {
      buttonDisable()
    }
  })

  $('select').on('keyup change', function(){
    if ($('option').is(':selected') && $('option:selected').val() != 0 || $.trim($('input').val()).length > 0) {
      buttonEnable()
    }
    else {
      buttonDisable()
    }
  })
}

buttonStatus()
* {
  box-sizing: border-box;
}

div {
  margin: 50px;
}

input[type="submit"] {
  background: green;
  border: none; 
  padding: 5px;
  color: #fff;
}

input[type="submit"][disabled] {
  background: red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>
  <input type="text" />
  <input type="text" />
  <select>
    <option value="0"></option> 
    <option value="1">Nigeria</option>
    <option value="2">Kenya</option>
    <option value="3">Tanzania</option>
    <option value="4">Uganda</option>
    <option value="5">Ethiopia</option>
    <option value="6">Mozambique</option>
  </select>
  <select>
    <option value="0"></option> 
    <option value="1">Nigeria</option>
    <option value="2">Kenya</option>
    <option value="3">Tanzania</option>
    <option value="4">Uganda</option>
    <option value="5">Ethiopia</option>
    <option value="6">Mozambique</option>
  </select>
  <input type="submit" disabled>
</div>

【问题讨论】:

  • 如果我了解您需要获得什么,您的解决方案是使用$(this) 来了解您的目标是什么元素。你可以这样做:var inputText = $.trim($(this).val())。问题出在$('select'),因为$(this) 将是选择,而不是输入。如果您在输入标签中放置一个类名或一个 id(两者都不同),这是最简单的。
  • $(this) 有点帮助。
  • 我不得不对马科斯刚才所说的话加倍评论。在 function() 中,您可以使用 $(this); 获取当前目标;这是当前范围。您还可以通过函数传递事件“e”;示例函数(e){...}。当尝试编写这样的验证时,命名和标识所有内容要容易得多。这样您就可以准确地挑选出您要检查的输入/选择。

标签: jquery select input


【解决方案1】:

您需要使用each 迭代所有输入和选择,并检查它们的值是否不等于0''

像这样:

function buttonStatus() {
  var buttonDisable = function() {
    $('input[type="submit"]').attr('disabled', true)
  },
      buttonEnable = function() {
        $('input[type="submit"]').attr('disabled', false);
      }

  var elements = $('input[type="text"], select').on('keyup change', function() {
    var valid = false;
    
    elements.each(function() {
      var elm = $(this),
          val = elm.val();
      
      if ((val != '0' && elm.is('select')) || (val != '' && elm.is('input'))) {
        valid = true;
        return false;
      }
    });

    if(valid) {
      buttonEnable()
    }
    else {
      buttonDisable();
    }
  })
}

buttonStatus()
* {
  box-sizing: border-box;
}

div {
  margin: 50px;
}

input[type="submit"] {
  background: green;
  border: none; 
  padding: 5px;
  color: #fff;
}

input[type="submit"][disabled] {
  background: red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>
  <input type="text" />
  <input type="text" />
  <select>
    <option value="0"></option> 
    <option value="1">Nigeria</option>
    <option value="2">Kenya</option>
    <option value="3">Tanzania</option>
    <option value="4">Uganda</option>
    <option value="5">Ethiopia</option>
    <option value="6">Mozambique</option>
  </select>
  <select>
    <option value="0"></option> 
    <option value="1">Nigeria</option>
    <option value="2">Kenya</option>
    <option value="3">Tanzania</option>
    <option value="4">Uganda</option>
    <option value="5">Ethiopia</option>
    <option value="6">Mozambique</option>
  </select>
  <input type="submit" disabled>
</div>

【讨论】:

  • 并非所有字段都必须选择
【解决方案2】:

您可以检查任何输入元素是否具有值,处理选择的情况,您可以检查selectedIndex

$('div :input').on('input', function() {
  var $container = $(this).closest('div');
  var disabled = !$container.find(':input:not(:submit)').filter(function() {
    return this.value && ($(this).is('select') ? this.selectedIndex : true);
  }).length;  
  $container.find(':submit').prop('disabled', disabled);
});
* {
  box-sizing: border-box;
}
div {
  margin: 50px;
  }
input[type="submit"] {
  background: green;
  border: none; 
  padding: 5px;
  color: #fff;
}
input[type="submit"][disabled] {
  background: red;
    
  
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>
  <input type="text" />
  <input type="text" />
  <select>
    <option value="0"></option> 
    <option value="1">Nigeria</option>
    <option value="2">Kenya</option>
    <option value="3">Tanzania</option>
    <option value="4">Uganda</option>
    <option value="5">Ethiopia</option>
    <option value="6">Mozambique</option>
  </select>
  <select>
    <option value="0"></option> 
    <option value="1">Nigeria</option>
    <option value="2">Kenya</option>
    <option value="3">Tanzania</option>
    <option value="4">Uganda</option>
    <option value="5">Ethiopia</option>
    <option value="6">Mozambique</option>
  </select>
  <input type="submit" disabled>
</div>

【讨论】:

    【解决方案3】:

    通常我会尝试处理表单提交的验证。如果添加必需的属性,则可以使验证更容易。您可以在提交表单 id='formId' 时尝试类似这种方法。这是针对 Boostrap v3 表单的。

    // On form submit
    $('#formId').submit(function(e) {
    
        // Check all required fields before submit
        $('#formId').find('input, select, textarea').each(function() {
            var self = $(this);
            if (self.attr('required')) {
                if (self.parent().hasClass('input-group')) {
                    if (!self.val()) {
                        // Add some display error fadeIn or Class Change here!
                        self.parent().parent().addClass('has-error');
                        self.parent().parent().find('span').fadeIn();
                    } else {
                        // Add some display error fadeOut or Class Change here!
                        self.parent().parent().removeClass('has-error');
                        self.parent().parent().find('span').fadeOut();
                    }
                } else {
                    if (!self.val()) {
                        self.parent().addClass('has-error');
                        self.parent().find('span').fadeIn();
                    } else {
                        self.parent().removeClass('has-error');
                        self.parent().find('span').fadeOut();
                    }
                }
            }
        });
    
        // If has-error classes found, do not submit
        if ($('.has-error').length > 0) {
            // Prevent form default submit
            e.preventDefault();
        } else {
            if (spinner === false) {
                // Check out the JS Spinner.
                spinner = new Spinner().spin();
                $('#submit_button_div').prepend(spinner.el);
            }
        }
    
    });
    

    您可以将其更改为使用 on change 或 focus out 来查看所有表单字段,而不是在 Form Submit 上,但这可能会为您的页面添加大量 javascript 处理。

    【讨论】:

      【解决方案4】:
      function buttonStatus() {
        var not_emp_inp = $('input:text').filter(function() { return $(this).val() != ""; });
        var not_emp_sel = $('select').filter(function() { return $(this).val() != "0"; });
        $('input[type="submit"]').attr('disabled', (not_emp_inp.length && not_emp_sel.length) ? false : true);
      }
      
      $('input,select').on('keyup change', function(){   buttonStatus();  });
      

      FIDDLE

      【讨论】:

      • @NeedHate 是这样的吗?需要一个输入来填充和一个选项来选择
      猜你喜欢
      • 1970-01-01
      • 2016-12-28
      • 2012-09-27
      • 2014-04-18
      • 2020-10-31
      • 1970-01-01
      • 2018-05-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多