Событие для $ ('input [type = radio]: флажок') - PullRequest
7 голосов
/ 13 июля 2011

Это мой скрипт jQuery:

$("input[type=radio]:checked").live("click", function() {
    $(this).attr("checked",false);
});

Я хочу, чтобы все мои переключатели можно было проверять и снимать.Предполагается, что код срабатывает ТОЛЬКО при проверке радио при нажатии.Но каким-то образом любой щелчок радио (независимо от того, отмечен он или нет) вызовет это событие.Это как если бы браузер сначала проверил радио, а затем запустил мой скрипт.

Если я alert($("input[type=radio]:checked").size()), он дал мне правильный счет.

Я тестирую код в FF4, ноЯ надеюсь, что это решение может быть полезным и для IE.

Хорошо, поскольку мой вопрос выглядит запутанным, это рабочий код для того, что я хочу, НО требует дополнительный пользовательский атрибут, которого, я надеюсь, можно избежать.

<input type="radio" name="group1" value="1" isChecked="false"/>
<input type="radio" name="group1" value="2" isChecked="false"/>
<input type="radio" name="group1" value="3" isChecked="false"/>

<script>

$(document).ready(function(){
    $("radio").click(function(){
        if($(this).attr("isChecked")=="false"){
            $(this).attr("isChecked","true");
            $(this).attr("checked",true);
        }
        else{
            $(this).attr("isChecked","false");
            $(this).attr("checked",false);
        }
    });
});

</script>

1 Ответ

8 голосов
/ 13 июля 2011

Это не совсем то, что переключатели предназначены для использования.Похоже, вы пытаетесь создать элемент управления вводом, который находится где-то между переключателем и флажком.

Существует несколько подходов, которые вы можете использовать:

1) Используйте отдельную кнопку дляочистите переключатели:

HTML:

<input id="clearRadios" type="button">Clear</input>

JQuery:

$('#clearRadios').click(function() {
    // use attr only if you're using an older version of jQuery
    $('input[type=radio]').prop('checked', false);
});

2) Использованиефлажки, настроенные так, чтобы они работали как переключатели:

var $chkboxes = $('input[type=checkbox]');
$chkboxes.click(function() {
    var currChkbox = this;
    $chkboxes.each(function() {
        if (this !== currChkbox) {
            $(this).prop('checked', false);
        }
    });      
});

Если бы это был я, в большинстве случаев я бы выбрал первый вариант.

...