【问题标题】:Have combobox a required field only if checkbox is clicked仅当单击复选框时,组合框才有必填字段
【发布时间】:2018-07-04 13:47:00
【问题描述】:

我有一个复选框,选中时会显示一个隐藏的组合框。当我提交表单并且未按下复选框(组合框仍然隐藏)时,它仍然将隐藏的组合框作为“必填”字段。这是我的代码:

$(function() {
  var checkbox = $("#hascustpo");
  var hidden = $("#custpo");
  hidden.hide();
  checkbox.change(function() {
    if (checkbox.is(':checked')) {
      checkbox.attr("required", true);
      hidden.show();
    } else {
      hidden.hide();
      checkbox.attr("required", false);
    }
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<label>
   <input type="checkbox" name="hascustpo" value="True" id="hascustpo"/>
   Has Customer PO
 </label><br>
<div id="custpo">
  <label>Customer PO Number <b style="color:red;">*</b></label>
  <select id="txtfield" style="width: 200px;" name="custpo" class="inputvalues" required>
    <option disabled selected>-- Customer PO Number</option>
    <option>AUTO PO NUM | DESCRIPTION</option>
  </select>
  <br>
</div>

【问题讨论】:

  • 尝试使用 checkbox.removeAttr("required");而是 checkbox.attr("required",false);

标签: javascript jquery html checkbox


【解决方案1】:

首先我猜你想为隐藏元素设置所需,而不是复选框。

其次,您最好为此使用 prop :) http://api.jquery.com/prop/

另一种方式是removeAttr,但prop 更适合您的情况。见.prop('checked',false) or .removeAttr('checked')?


        $(function() {
          var checkbox = $("#hascustpo");
          var hidden = $("#custpo");
          var input = $("#txtfield");
          hidden.hide();
          checkbox.change(function() {
              if (checkbox.is(':checked')) {
                  input.prop("required", true);
                  hidden.show();
              } else {
                  hidden.hide();
                  input.prop("required", false);
              }
          });
        });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form>
<label>
       <input type="checkbox" name="hascustpo" value="True" id="hascustpo"/>
       Has Customer PO
     </label><br>
     <div id="custpo">
       <label>Customer PO Number <b style="color:red;">*</b></label>
         <select id="txtfield" style="width: 200px;" name="custpo" class="inputvalues" required>
           <option disabled selected>-- Customer PO Number</option>
           <option>AUTO PO NUM | DESCRIPTION</option>
         </select>
         <br>
     </div>
     <button type="submit">Submit</botton>
</form>

浏览器验证 Select 元素是否可见:

【讨论】:

  • 这让我通过了未检查时不会提交的问题。但是现在当复选框被按下并显示隐藏的组合框时,如果我不选择一个选项,它仍然会提交表单,当它应该发出通知“请从此列表中选择一个项目”
  • 我刚刚在我的答案中添加了一个提交按钮......对我来说,它会在显示选择框时立即验证选择框(您在哪个浏览器中测试?)
  • @Lars_OlofKreim 它会让我点击提交而不会阻止我。我正在使用 chrome 并在 IE 上对其进行了测试。我也只使用您提供的 sn-p 制作了一个单独的页面,但它让我即使没有选择选项也可以按提交。
  • 奇怪的是,当我测试我的代码时会显示此验证
【解决方案2】:

您需要一个函数来检测何时提交表单并在勾选复选框时检查组合框的值:

$(function() {
  var checkbox = $("#hascustpo");
  var hidden = $("#custpo");
  hidden.hide();
  checkbox.change(function() {
    if (checkbox.is(':checked')) {
      checkbox.attr("required", true);
      hidden.show();
    } else {
      hidden.hide();
      checkbox.attr("required", false);
    }
  });
  
  $("form").submit(function (e) {
    if($("#hascustpo").is(':checked') && $("#custpo option:selected" ).val() == 0){
      e.preventDefault();
      alert("Please select an item from this list");
    }
    
  });
});
<form>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<label>
   <input type="checkbox" name="hascustpo" value="True" id="hascustpo"/>
   Has Customer PO
 </label><br>
<div id="custpo">
  <label>Customer PO Number <b style="color:red;">*</b></label>
  <select id="txtfield" style="width: 200px;" name="custpo" class="inputvalues" required>
    <option value="0" disabled selected>-- Customer PO Number</option>
    <option value="1">AUTO PO NUM | DESCRIPTION</option>
  </select>
  <br>
</div>
     <button type="submit">Submit</botton>
</form>

【讨论】:

  • 太棒了,效果很好,但我的表单上也有其他文本框,当未按下复选框时,它会隐藏“有客户 PO”下的所有内容 我不擅长 javascript,但我将如何纠正这个?
  • @Jordan 这是因为它在 div
    如果你不想隐藏文本框然后将它们移出这个 div 或者你可以在里面创建另一个 div此 div custpo 仅包含您要隐藏的控件
猜你喜欢
  • 2016-11-09
  • 1970-01-01
  • 2011-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多