После небольшого перерыва возобновляю добрую традицию =).
Сегодня я расскажу о checkbox_ах. Да, что-то новое будет поведать сложно, так как статей о них написано немало.
Начну я, пожалуй, с чего-нибудь простого, но не сильно заезженного - чекбоксы с тремя состояниями.
Часто при создании пользовательских фильтров требуется не только отмечать "что нужно", но также поменять "что не нужно" и оставлять "что не важно". Яркий пример checkbox с тремя состояниями реализован на nigma.ru.
У данной формы может быть всего 2 состояния (checked или не checked). Поэтому для определения состояния предлагаю использовать параметр value.
соответственно:
- 0 - третье состояние
- 1 - unchecked
- 2 - checked
В первую очередь требуется решить задачу кастомизации стандартного чекбокса, об этом уже много написано, поэтому просто приведу код, как реализовал это я:
<div class="checkbox"><input type="checkbox" id="checkbox1" value="1" name="moscow" /></div><label for="checkbox1">Москва и область</label>
.checkbox{
float:left;
clear:left;
margin-top:5px;
width:14px;
height:14px;
background: url(../img/checkboxs.png) no-repeat 0px 0px;
}
.checkbox input{
filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);
-moz-opacity: 0;
-khtml-opacity: 0;
opacity: 0;
cursor: pointer;
}
Далее необходимо прикрутить анализ состояния чекбокса и обработчик его изменения:
$(document).ready(function(){
// Просчет состояния
$('.checkbox-area .checkbox input').each(function(){
$(this).attr('checked','checked');
if ($(this).val() != '1'){
if ($(this).val() == 0){
$(this).parents('li').addClass('checked3');
}else{
$(this).parents('li').addClass('checked');
}
}
})
//Изменение состояния
$('.checkbox-area .checkbox input').live('change', function(){
var cur_obj = $(this);
$(this).attr('checked','checked');
if (cur_obj.val() =='0'){
cur_obj.val('1');
cur_obj.parents('li').removeClass('checked3');
}else{
if (cur_obj.val() =='1'){
cur_obj.val('2');
cur_obj.parents('li').addClass('checked');
}else{
cur_obj.val('0');
cur_obj.parents('li').removeClass('checked').addClass('checked3');
}
}
})
})