【问题标题】:Jquery stop form submit unless checkbox selected除非选中复选框,否则 Jquery 停止表单提交
【发布时间】:2011-06-15 07:35:55
【问题描述】:

我有这段代码,但它似乎没有返回 true。警报总是出现。任何想法(无需创建一个 var 来存储已选中的复选框,因为这似乎有点 hacky)。

谢谢。

$("#form").submit(function(e) {
    $('input[type=checkbox]').each(function () {
        if(this.checked){
            return true;
        }
    });
    alert("Please select at least one to upgrade.");
    return false;
});

【问题讨论】:

    标签: jquery forms checkbox submit


    【解决方案1】:

    您无需执行循环来确定是否选中了复选框。 :checked 选择器过滤掉所有未选中的。然后您可以使用$.length 来获取已检查输入的计数。

    $("#form").submit(function(e) {
        if(!$('input[type=checkbox]:checked').length) {
            alert("Please select at least one to upgrade.");
    
            //stop the form from submitting
            return false;
        }
    
        return true;
    });
    

    此外,使用您的方法,一个小的改变应该可以使这项工作发挥作用

    $("#form").submit(function(e) {
        $('input[type=checkbox]').each(function () {
            if($(this).is(':checked')){
                return true;
            }
        });
        alert("Please select at least one to upgrade.");
        return false;
    });
    

    我认为您可能只是缺少this 周围的$()

    【讨论】:

    • 谢谢。一个不错的清洁解决方案。我选择了你自己的版本,因为它看起来更具可读性。
    • 我最近遇到了一个问题,即 e.preventDefault() 不适用于 Firefox。通过一些研究,我发现返回 true 或 false 会做同样的事情,并且被更广泛地接受。我已经改变了我的答案以反映这种方法。
    【解决方案2】:

    需要指出的是,您使用的是 ID 引用 #form。您是指仅引用所有表单,还是该表单的 ID 为 form

    【讨论】:

    • 它有一个不同的 id,这是我实际引用的。我只是将其更改为简化。
    【解决方案3】:

    检查复选框数量的示例...

    <script>
    
        function countChecked() {
          var n = $("input:checked").length;
          $("div").text(n + (n <= 1 ? " is" : " are") + " checked!");
        }
        countChecked();
        $(":checkbox").click(countChecked);
    
    </script>
    

    "$("input:checked")" 上方返回检查项的数组...您可以检查此数组的“长度”是否 > 0。

    【讨论】:

    • 如果我已经用 jquery 循环数组,这样做似乎有点多余。但我明白你的意思,我希望如果至少有一个被选中,我就可以继续提交。
    【解决方案4】:

    点击进入提交按钮的代码:

     $(":input").bind("click keypress", function(evt) {   
         var keyCode = evt.which || evt.keyCode;
         var sender = evt.target;                 
         if (keyCode == 13 || sender.type == "submit") {                        
            evt.preventDefault();  
            // add your validations
         }
         // and submit the form
     }
    

    【讨论】:

      【解决方案5】:
      var atleast = 1;
      function validate() {
          debugger;
          var CHK = document.getElementById("<%=chk1");
          var checkbox = document.getElementsByTagName("input");
          var counter = 0;
          for (var i = 0; i < checkbox.length; i++) {
              if (checkbox[i].checked) {
                  counter++;
              }
          }
          if (atleast > counter) {
              alert("Please select atleast " + atleast + " employee ");
              return false;
          }
          return true;
      }
      
      <button type="submit" name="Initiate" value="Initiate" on click="return validate()" id=" initiate"></button>
      

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-14
      • 2017-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-22
      • 1970-01-01
      • 2012-05-23
      相关资源
      最近更新 更多