jquery kullanarak radyoda etkinliği tıklayın veya değiştirin


86

Sayfamda bazı radyolar var ve kontrol edilen radyo değiştiğinde bir şeyler yapmak istiyorum, ancak kod IE'de çalışmıyor:

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

Google'da arama yaptıktan sonra, insanlar bunun yerine tıklamayı kullanmanızı önerir . Ama bu çalışmıyor.

Örnek kod şudur:

<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'de de çalışmaz.

Yani neler olduğunu bilmek istiyorum?

Ayrıca, kontrol edilen bir radyoyu tıklarsam değişiklik olayını yeniden tetikleyip tetiklemeyeceğinden korkuyorum.

GÜNCELLEME:

Yorum ekleyemiyorum, bu yüzden buraya cevap veriyorum.

IE8 kullanıyorum ve Furqan'ın bana verdiği bağlantı da IE8'de çalışmıyor. Sebebini bilmiyorum...


1
Test için IE'nin hangi sürümünü kullanıyorsunuz? Kodunuz IE8'de benim için çalışıyor. İşaretli bir radyoya tıkladığınızda olayın tetikleneceği konusunda haklısınız. Bundan kaçınmak için kodunuzda bir kontrol yapmanız gerekir.
kgiannakakis

benim için çalışıyor, aşağıdaki jsfiddle.net/NerXh
Hameedi'yi

Yanıtlar:


111

Bu kod benim için çalıştı:

$(function(){

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

});

http://jsfiddle.net/3q29L/


4
Bu, tek bir radyo hedeflendiğinde ve başka bir radyo seçmek diğerinin seçimini kaldırmasına neden olduğunda işe yaramıyor.
Doug Amos

1
Performansın birçok öğeye sahip bir sayfada bir sorun olduğu durumlar hariç. Bu durumda $('input[type=radio]')bunun yerine kullanın ("ek notlara" bakın: api.jquery.com/radio-selector )
jemmons

72

İsim niteliğini aşağıdaki gibi belirtebilirsiniz:

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

8
Daha az belirsizlik. Çok daha iyi pratik. +1
Jacks_Gulch

16

Benim için de çalışıyor, işte daha iyi bir çözüm:

keman demosu

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

jqueryTüm diğer içe aktarmaların ve javascript işlevlerinin üzerinde başlattığınızdan emin olmalısınız . Çünkü $bir jqueryişlevdir. Hatta

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

jquerybaşlatılmış olup olmadığını kontrol etmeyecektir. O sağlayacaktır <code>bütün javascripts başlatılır sonra yayınlanacaktır.


7

Deneyin

$(document).ready(

onun yerine

$('document').ready(

ya da bir steno kullanabilirsiniz

$(function(){
});

1

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

Bu sözdizimi, olayları işlemek için biraz daha esnektir. Yalnızca "değişiklikleri" gözlemlemekle kalmaz, aynı zamanda diğer olay türleri de burada tek bir olay işleyicisi kullanılarak kontrol edilebilir. Bunu, olayların listesini argüman olarak ilk parametreye ileterek yapabilirsiniz. JQuery Açık'a bakın

İkinci olarak, .change () .on ("değiştir", işleyici) için bir kısayoldur. Buraya bakın . Olaylar üzerinde daha fazla kontrole sahip olduğum için .change yerine .on () kullanmayı tercih ediyorum.

Son olarak, olayı öğeye eklemek için alternatif bir sözdizimi gösteriyorum.


Bu, Iwao Nishida'nın cevabından ne kadar farklı olabilir ?
Tüm Çalışanlar Önemlidir

farklıdır çünkü .change () kullanmaz ama .on () Bu yanıta olumsuz oy vermek için bir neden yoktur.
luis
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.