klik atau ubah acara di radio menggunakan jquery

86

Saya memiliki beberapa radio di halaman saya, dan saya ingin melakukan sesuatu ketika radio yang dicentang berubah, namun kodenya tidak berfungsi di IE:

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

Dan setelah googling, orang-orang menyarankan untuk menggunakan klik saja. Tapi itu tidak berhasil.

Ini adalah contoh kode:

<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>

Itu juga tidak bekerja di IE.

Jadi saya ingin tahu apa yang sedang terjadi?

Juga saya takut jika itu akan memicu kembali acara perubahan jika saya mengklik radio yang dicentang?

MEMPERBARUI:

Saya tidak bisa menambahkan komentar, jadi saya balas di sini.

Saya menggunakan IE8 dan tautan yang diberikan Furqan kepada saya juga tidak berfungsi di IE8. Saya tidak tahu kenapa...

hguser
sumber
1
Versi IE mana yang Anda gunakan untuk pengujian? Kode Anda berfungsi untuk saya di IE8. Anda benar bahwa acara tersebut akan terpicu jika Anda mengklik radio yang dicentang. Anda perlu melakukan pemeriksaan pada kode Anda untuk menghindari hal ini.
kgiannakakis
ini berfungsi untuk saya, periksa jsfiddle.net/NerXh
Furqan Hameedi

Jawaban:

111

Kode ini berfungsi untuk saya:

$(function(){

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

});

http://jsfiddle.net/3q29L/

alexl
sumber
4
Ini tidak berfungsi untuk saya ketika satu radio ditargetkan dan memilih radio lain menyebabkan yang lain batal memilih.
Doug Amos
1
Kecuali jika kinerja menjadi masalah pada halaman dengan banyak elemen. Dalam hal ini gunakan $('input[type=radio]')sebagai gantinya (lihat "catatan tambahan": api.jquery.com/radio-selector )
jemmons
72

Anda dapat menentukan atribut nama seperti di bawah ini:

$( 'input[name="testGroup"]:radio' ).change(
Iwao Nishida
sumber
8
Kurang ambiguitas. Latihan yang jauh lebih baik. +1
Jacks_Gulch
16

Berfungsi untuk saya juga, berikut adalah solusi yang lebih baik ::

demo biola

<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>

Anda harus memastikan bahwa Anda menginisialisasi di jqueryatas semua impor dan fungsi javascript lainnya. Karena $itu sebuah jqueryfungsi. Bahkan

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

tidak akan memeriksa jquerydiinisialisasi atau tidak. Ini akan memastikan bahwa <code>akan berjalan hanya setelah semua javascript diinisialisasi.

suhailvs
sumber
7

Mencoba

$(document).ready(

dari pada

$('document').ready(

atau Anda dapat menggunakan bentuk singkatan

$(function(){
});
rahul
sumber
1

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

Sintaks ini sedikit lebih fleksibel untuk menangani acara. Anda tidak hanya dapat mengamati "perubahan", tetapi juga jenis peristiwa lainnya dapat dikontrol di sini juga dengan menggunakan satu pengendali peristiwa. Anda dapat melakukan ini dengan meneruskan daftar kejadian sebagai argumen ke parameter pertama. Lihat jQuery On

Kedua, .change () adalah jalan pintas untuk .on ("change", handler). Lihat disini . Saya lebih suka menggunakan .on () daripada .change karena saya memiliki kontrol lebih besar atas peristiwa tersebut.

Terakhir, saya hanya menunjukkan sintaks alternatif untuk melampirkan acara ke elemen.

Carlos Augusto
sumber
Bagaimana ini secara efektif berbeda dari jawaban Iwao Nishida ?
Semua Pekerja Sangat Penting
ini berbeda karena tidak menggunakan .change () tetapi .on () Tidak ada alasan untuk memberi suara negatif pada jawaban ini.
luis