клацніть або змініть подію на радіо за допомогою 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 02.03.11

це працює для мене, перевірте наступне jsfiddle.net/NerXh
Hameedi

Відповіді:


111

Цей код працював для мене:

$(function(){

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

});

http://jsfiddle.net/3q29L/


4
Це не працює для мене, коли на одне радіо націлено, а вибір іншого радіо змушує інший скасувати вибір.
Doug Amos

1
За винятком випадків, коли продуктивність є проблемою на сторінці з багатьма елементами. У цьому випадку використовуйте $('input[type=radio]')замість цього (див. "Додаткові примітки": api.jquery.com/radio-selector )
jemmons

72

Ви можете вказати атрибут name, як показано нижче:

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

8
Менше двозначності. Набагато краща практика. +1
Jacks_Gulch

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>запуск лише після ініціалізації всіх javascripts.


7

Спробуйте

$(document).ready(

замість

$('document').ready(

або ви можете скористатися скороченою формою

$(function(){
});

1

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

Цей синтаксис трохи гнучкіший для обробки подій. Тут ви можете не тільки спостерігати за „змінами“, але й іншими типами подій можна керувати за допомогою одного єдиного обробника подій. Ви можете зробити це, передавши список подій як аргументи першому параметру. Дивіться jQuery On

По-друге, .change () - це ярлик для .on ("зміна", обробник). Дивіться тут . Я вважаю за краще використовувати .on (), а не .change, тому що я більше контролюю події.

Нарешті, я просто показую альтернативний синтаксис для приєднання події до елемента.


Як це ефективно відрізнятися від Івао Нішіда в відповідь ?
Усі робітники є основними

він відрізняється тим, що в ньому не використовується .change (), а .on () Немає жодної причини голосувати проти цієї відповіді.
Луїс,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.