2010-11-23 122 views
2

我有一个单选按钮的形式。在表单提交之前,我需要检查是否有10个单选按钮被选中。这个代码的窍门(即我已经检查了10个时得到提醒),但我无法计算出我的return truereturn false语句停止或让我们的计数达到10时提交的位置。jquery提交表单问题

$('.submit').click(function() { 
     var radios = $(':radio'); 
     var count = 0; 
     $.each(radios, function() { 
      if ($(this).is(':checked')) { 
       count++; 
       alert(count); 
      } 

      if (count === 10) { 
       alert('hi') 
       return true; 
      } 
     }) 
     return false; 
}) 

目前底部的return false即使在计数为10时也会停止提交表单,但我需要返回false以停止立即提交表单。

希望这是有道理的。

回答

3

使用event.preventDefault()而不是return false;。此外,使用提交,而不是点击活动事件:

var the_form = $('#theformid'); 
the_form.submit(function (event) { 
    var radios = the_form.find(':radio:checked'); 
    if (radios.length !== 10) { 
     event.preventDefault(); 
     // provide feedback here. 
    } 
}); 

如果附加到点击事件,表单仍然可以使用键盘提交。

2

尝试是这样的:

$('.submit').click(function(){ 
    return $('#yourform :radio:checked').length == 10; 
}); 

希望有像#yourform你可以用它来使选择更加具体,如上面的容器的id。


编辑:根据你的评论,如果你想可靠地拦截表单提交(例如,即使没有按钮被点击提交),如其他人所说,你要重视行为表单的提交事件。

$('#yourform').submit(function(e){ 
    var hasTen = $(this).find(':radio:checked').length == 10; 
    if(!hasTen){ 
    e.preventDefault(); 
    alert('Please check ten boxes.'); 
    } 
}); 
+0

这太棒了。非常简洁...但我需要提供一个警告,如果10没有被检查,所以我需要一个与if的东西。 event.preventDefault()看起来像獾。 – 2010-11-23 15:27:59

0

为什么你检查迭代内的计数? 你应该通过将检查放在每个func之外来解决它。

$('.submit').click(function() { 
    var radios = $(':radio'); 
    var count = 0; 
    $.each(radios, function() { 
     if ($(this).is(':checked')) { 
      count++; 
     }   
    }); 

    if (count == 10) { 
      return true; 
      alert("great!"); 
    } 
    return false; 
}) 

我也建议你使用的console.log(味精),而不是警报(MSG)的方式更好的调试;)

编辑:我现在看到的警报您的意见,我想它出于调试目的,这就是为什么告诉你有关console.log;)