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


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/


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(

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.


7

Mencoba

$(document).ready(

dari pada

$('document').ready(

atau Anda dapat menggunakan bentuk singkatan

$(function(){
});

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.


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.