2011-01-06 3 views
1

私は、ユーザーが各フィールドセットの中に一つだけのチェックボックスをクリックすることを可能にする基本的なチェックボックスのクリック機能を持っている(4つのフィールドセットを含む各numberousのチェックボックスがあります。これは(jQueryの検証およびチェックボックスをクリックして機能

$(document).ready(function(){ 

$('input[type=checkbox]').click(function(){ 

    // get the fieldset class 
    var fieldset = $(this).parents('fieldset').attr('class'); 

    // set the number of checked 
    var numChecked = $('.'+fieldset+' input:checked').size(); 

    // if more than 1 
    if(numChecked > 1){ 
     alert('Please select only one option per breakout session.') 

$) .ATTR(偽、「確認」);}

}); 

その後、私は少なくとも一つのチェックボックスがフォームを投稿する前に選択されていることを確認するフォーム上の機能を提出しています

$('form[name=mainForm]').submit(function(){ 

    var error = ''; 

    // loop through each fieldset 
    $('fieldset',this).each(function(){ 

     // set the number of checked for this fieldset 
     var numChecked = $('input:checked',this).size(); 

     // if none are checked 
     if(!numChecked){ 
      // set the error var 
      error = 'At least one of your time sessions has no checkbox selected!'; 
      // add class to show user 
      $(this).addClass('errorSessions'); 
     } 
     else{ 
      $(this).removeClass('errorSessions'); 
     } 

    }); 

    // if any errors, show them and don't allow the form to be submitted 
    if(error.length){ 
     alert(error); 
     return false; 
    } 

    $("#mainForm").validate(); 

フォームは完全に検証され、すべてが初めて完全に発生します。問題は、フォームを送信すると検証が行われ、「少なくとも1つの時間セッションにチェックボックスが選択されていません」というエラーが表示されることです。 - その時点で、最初にチェックされていないフィールドセット内の複数のチェックボックスを選択すると、チェックボックスのクリック機能は無視され、フィールドセット内で複数のチェックボックスを選択できます。

誰か助けてもらえますか?

答えて

1

さて、私はそれを理解しました。このエラーは、フィールドセットの一意のクラス名を変更する 'errorsessions'クラスをフィールドセットに追加するスクリプトと関係があります。各フィールドセットに一意のIDを追加し、スクリプトを.attr( 'id')を参照するように変更します。 .attr( 'class')の代わりに。問題が解決され、クラスが追加された後のオンクリックアラート機能が再開されました。

0

ラジオボタンは1つの選択のために使用することを検討しますか?この方法では、特定のグループ内の複数のラジオボタンを選択することができないため、複数の選択を確認する必要はありません。

+0

私は考えていましたが、フォームはもう少し複雑です...私はまた、複数のフィールドセットにわたって同じ名前を持つ各チェックボックスで発生する変更機能を持っています。 1つは所定のフィールドセット内で選択されます。ラジオボタンでこれを試してみると思いますが、うまくいきませんでしたが、別のショットをつけることができます。しかし、私は最初のケースでなぜ機能が無効になるのだろうかと疑問に思っています。それとも、クラスを変更して何かを持っていますか? – jweisberg