jqueryを使用してラジオのイベントをクリックまたは変更します


86

ページにいくつかの無線があり、チェックされた無線が変更されたときに何かをしたいのですが、コードがIEで機能しません。

$('input:radio').change(...);

そしてグーグルした後、人々は代わりにクリックを使用することを提案します。しかし、それは機能しません。

これはサンプルコードです:

<html>
    <head>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script>
        <script type="text/javascript">
            $('document').ready(
                function(){
                    $('input:radio').click(
                        function(){
                            alert('changed');   
                        }
                    );  
                }
            );

        </script>
    </head>
    <body>
        <input type="radio" name="testGroup" id="test1" />test1<br/>
        <input type="radio" name="testGroup" id="test2" />test2<br/>
        <input type="radio" name="testGroup" id="test3" />test3</br>
    </body>
</html>

また、IEでは機能しません。

だから私は何が起こっているのか知りたいですか?

また、チェックされたラジオをクリックすると、変更イベントが再トリガーされるのではないかと心配しています。

更新:

コメントを追加できないので、ここに返信します。

私はIE8を使用していますが、Furqanが提供するリンクもIE8では機能しません。何故かはわからない...


1
テストに使用しているIEのバージョンはどれですか。あなたのコードはIE8で私のために働きます。チェックされたラジオをクリックすると、イベントがトリガーされるのは正しいことです。これを回避するには、コードでチェックを実行する必要があります。
kgiannakakis 2011年

それは私のために働きます、次のjsfiddle.net/NerXhを
Furqan Hameedi 2011年

回答:


111

このコードは私のために働いた:

$(function(){

    $('input:radio').change(function(){
        alert('changed');   
    });          

});

http://jsfiddle.net/3q29L/


4
これは、1つの無線がターゲットになっていて、別の無線を選択すると他の無線の選択が解除される場合は機能しません。
ダグ・アモス

1
多くの要素を含むページでパフォーマンスが問題になる場合を除きます。その場合は、$('input[type=radio]')代わりに使用してください(「追記」を参照:api.jquery.com/radio-selector
jemmons 2013

72

name属性は次のように指定できます。

$( 'input[name="testGroup"]:radio' ).change(

8
あいまいさが少なくなります。はるかに良い練習。+1
Jacks_Gulch 2014

14

私にとってもうまくいきます、ここにもっと良い解決策があります::

フィドルデモ

<form id="myForm">
  <input type="radio" name="radioName" value="1" />one<br />
  <input type="radio" name="radioName" value="2" />two 
</form>

<script>
$('#myForm input[type=radio]').change(function() {       
    alert(this.value);
});
</script>

jquery他のすべてのインポートおよびjavascript関数の上に初期化したことを確認する必要があります。ため$であるjquery機能。でも

$(function(){
 <code>
}); 

jquery初期化されているかどうかはチェックされません。これにより、<code>すべてのJavaScriptが初期化された後にのみ実行されるようになります。


7

試してみてください

$(document).ready(

の代わりに

$('document').ready(

または、省略形を使用できます

$(function(){
});

1

$( 'input[name="testGroup"]:radio' ).on('change', function(e) {
     console.log(e.type);
     return false;
});

この構文は、イベントを処理するためにもう少し柔軟です。「変更」を監視できるだけでなく、単一のイベントハンドラーを使用して、他のタイプのイベントもここで制御できます。これを行うには、イベントのリストを引数として最初のパラメーターに渡します。jQueryOnを参照してください

次に、.change()は.on( "change"、handler)のショートカットです。こちらをご覧ください。イベントをより細かく制御できるため、.changeではなく.on()を使用することをお勧めします。

最後に、イベントを要素にアタッチするための代替構文を示しています。


これは西田岩夫の答えと効果的にどのように違うのですか?
すべての労働者は不可欠です2016年

.change()を使用せず、.on()を使用するため、この回答に反対する理由はありません。
ルイス2018
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.