Используя jQuery, каков наилучший способ установить прослушиватели событий onClick для радиокнопок? - PullRequest
10 голосов
/ 05 сентября 2008

Для следующего HTML:

<form name="myForm">
    <label>One<input  name="area"  type="radio" value="S"  /></label>
    <label>Two<input name="area"   type="radio" value="R" /></label>
    <label>Three<input name="area"   type="radio" value="O" /></label>
    <label>Four<input name="area" type="radio" value="U" /></label>
</form>

Меняется следующий код JavaScript:

$(function() {
     var myForm = document.myForm;
     var radios = myForm.area;

     // Loop through radio buttons
     for (var i=0; i<radios.length; i++) {
        if (radios[i].value == "S") {
            radios[i].checked = true;   // Selected when form displays
            radioClicks();   // Execute the function, initial setup
        }
        radios[i].onclick = radioClicks;  // Assign to run when clicked
     }  
 });

Спасибо

РЕДАКТИРОВАТЬ: выбранный ответ отвечает на вопрос, который я задал, однако мне нравится ответ, который использует bind (), потому что он также показывает, как выделить группу переключателей

Ответы [ 6 ]

19 голосов
/ 06 сентября 2008
$(document).ready(function(){
    $("input[name='area']").bind("click", radioClicks);
});

functionradioClicks() {
    alert($(this).val());
}

Мне нравится использовать bind() вместо непосредственного подключения обработчика событий, потому что вы можете передавать дополнительные данные обработчику событий (здесь не показано, но данные являются третьим аргументом bind ()) и потому, что вы можете легко отсоединить его ( и вы можете связывать и отменять привязку по группам - см. документацию jQuery).

http://docs.jquery.com/Events/bind#typedatafn

18 голосов
/ 06 сентября 2008
$( function() {
    $("input:radio")
        .click(radioClicks)
        .filter("[value='S']")
        .attr("checked", "checked");
});
2 голосов
/ 05 сентября 2008
$(function() {

  $("form#myForm input[type='radio']").click( fn );

});

function fn()
{
   //do stuff here
}
1 голос
/ 05 сентября 2008
$(function() {
    $('input[@type="radio"]').click(radioClicks);
});
0 голосов
/ 05 сентября 2008
$(function() {
    $('#myForm :radio').each(function() {
        if ($(this).value == 'S') {
            $(this).attr("checked", true);
            radioClicks();
        }

        $(this).click(radioClicks);
    });
});
0 голосов
/ 05 сентября 2008

Я думаю, что-то подобное должно работать (но это не проверено):

$("input[@type='radio']").each(function(i) {
    if (this.val() == 'E') {
        radioClicks();
        this.get().checked = true;
    }
}
$("input[@type='radio']").click(radioClicks);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...