2010-11-23 144 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;)