2017-08-18 9 views
0

同じグループの別のラジオボタンをチェックするときにクラスを削除できません。今は、クラスは固執して決して遠ざかりません。異なるラジオボタンを選択するとクラスを削除します

$(function(){ 

$('input[name=radio]').change(function(){   
     if($(this).is(":checked")){ 
       $(this).closest('div').addClass("payBoxSelected"); 
      } else { 
       $(this).closest('div').removeClass("payBoxSelected"); 
      }            
    }); 

}); 

これはなぜ機能しないのでしょうか?

+0

は –

+0

同様に選択された要素のためではなく、未チェックのもののための無線火災のための変更イベントを、あなたのHTMLを表示します。それは常にチェックされます。 – Taplar

+0

以下の回答のためのサイドノート。すべてのラジオのコレクションがある場合は、$ allTheRadios.not(これ)を実行すると、クラスを削除できる選択されていないラジオがすべて返されます。あなたが選択されたものであることを知っているので、ifロジックを行う必要はありません。 'element.checked'が利用可能であるため、あなたが$(要素)を行う必要がない場合でもサイドサイドノート.is(':checked ') – Taplar

答えて

0

をそれは他のラジオが変更されていないことを確認しています(したがって、固まっているようです)。最初にすべてのクラスを削除して、チェックされたラジオだけに必要なクラスを追加するのはどうですか?

これを試してみてください:

$('input[name=radio]').change(function(){ 
    //first remove class from all 
    $('input[name=radio]').closest('div').removeClass("payBoxSelected");   

    //now add the class to checked radio 
    if($(this).is(":checked")){ 
     $(this).closest('div').addClass("payBoxSelected"); 
    }            
}); 
+0

恐ろしい!魅力のように働いた。どうもありがとう! –

0

それが最善の方法かどうか分からないのですが、これは動作します:

var inputs$ = $('input[name=radio]'); 
inputs$.change(function() { 
    inputs$.each(function (index, el) { 
     if ($(el).is(":checked")) { 
      $(el).closest('div').addClass("payBoxSelected"); 
     } else { 
      $(el).closest('div').removeClass("payBoxSelected"); 
     } 
    }); 
}); 
0

この試してみてください:あなたが唯一の(追加または削除)ラジオのクラスを変更しているので

$(document).ready(function() { 
    $('input[type=radio]').click(function() { 
     $('input[name='+$(this).attr('name')+']:not(:checked)').removeClass("payBoxSelected"); 
     $('input[name='+$(this).attr('name')+']:checked').addClass("payBoxSelected"); 
    });  
});​ 
関連する問題