Сделать возможность выбора не более одного пункта

Рейтинг: 0Ответов: 1Опубликовано: 07.11.2014

http://jsfiddle.net/0n04s1Ls/1/

HTML:

<input type="radio" name='abc1' class="rad" />
<input type="radio" name='abc2' class="rad" />
<input type="radio" name='abc3' class="rad" />

JS:

$('.rad').mousedown(function () {
    $(this).data('checked', $(this).prop('checked'));
}).click(function () {
    var checked = $(this).data('checked');
    $('.rad').prop('checked', false);
    $(this).prop('checked', !checked);
});

Задача: не давать выбрать более одного инпута. Давать возможность снять выделение. Такое впечатление, что это говнокод. Но как его значительно улучшить не знаю.

Мои варианты:
1) Все-таки назвать их одним именем - пропадет необходимость всем проставлять false;
2) использовать checkbox - пропадет необходимость проверять статус инпута, но придется всем проставлять false;

Есть ли человеческое решение?

Ответы

▲ 2Принят

@knes, задача неординарная, поэтому я бы не сказал, что у вас какой-то *овнокод. Может быть записать по другому, но смысл не меняется. Ну и всё-таки полям дать одно имя:

var stat = false;
$('.rad').on({
    mousedown: function(){
        stat = $(this).prop('checked');
    },
    click: function(e){
        if(stat) $(this).prop('checked', false);
    }
});