Стилизация checkbox
Приветствую всех.
Делаю стилизацию чекбокса: - прячу все чекбоксы - добавляю span с классом (и соответственно стили) - проверяю были ли checked, добавляю класс для активных псевдочекбоксов - при клике на псевдочекбокс, передаю клик самому чекбоксу
$(document).on('click', '.input_checkbox', function(){
$(this).prev().click();
});
- при изменении чекбокса изменяю класс псевдочекбоксу Всё ок, работает. Но если добавить label <label for="check"> <input type="checkbox" id="check"> <span class="input_checkbox"></span> bla-bla </label> По клику на label происходит передача клика чекбоксу, псевдочебокс изменился - ok Но если при такой структуре кликнуть по псевдочебоксу он передаст клик на чекбокс + клик передаст и label :( Как правильно отловить это событие от label ? писать проверку на родителя чекбокса ? типа
if ($(this).closets('label')) e.defaultPrevented()
Помогите разобраться. з.ы. Совет использовать плагин не нужен, т.к. это не для сайта, а для себя :) |
Цитата:
|
Статейка на эту тему...
http://xiper.net/collect/html-and-cs...i-radio-na-css |
Label передает клик автоматически в инпут, не ?
получается дабл клик проблема не в том, что я не могу привязать. а хочу разобраться) для себя, учусь использовать js/jquery |
Цитата:
|
Цитата:
Цитата:
а если пользователь кликает по псевдочекбоксу, он автоматически кликает и по label, т.к. псевдочекбокс вложен в label: label input type="checkbox" span.pseudocheckbox |
Цитата:
Ничего больше мудрить не нужно.
<!DOCTYPE html>
<html>
<head>
<script src='http://code.jquery.com/jquery-latest.js'></script>
<!--
<link rel='stylesheet type=text/css href=tmp.css' />
-->
<style type='text/css'>
input[type='checkbox'] {
display: none;
}
.input_checkbox {
display: inline-block;
width: 17px;
height: 17px;
background: url('http://xozblog.ru/wp-content/uploads/2012/10/check_radio_sheet.png') 0 0;
}
.input_checkbox.on {
background: url('http://xozblog.ru/wp-content/uploads/2012/10/check_radio_sheet.png') -20px 0;
}
</style>
<script type='text/javascript'>
$(function () {
$('label').mouseup(function (){
$(this).find('.input_checkbox').toggleClass('on');
});
});
</script>
</head>
<body>
<label for="check">
<input type="checkbox" id="check">
<span class="input_checkbox"></span>
bla-bla
</label>
</body>
</html>
|
:-? по желанию ... .add(this) можно убрать
<!DOCTYPE HTML>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css">
span.pseudocheckbox {
background: #FFCC00;
}
label.pseudocheckbox{
border-radius: 8px;
border: #00CCFF 2px solid;
}
</style>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script>
$(function()
{
$(document).on('click', 'label', function(event)
{
$('span', this).add(this).toggleClass('pseudocheckbox', $('input', this).prop('checked'));
}
)
}
);
</script>
</head>
<body>
<label for="check">
<input type="checkbox" id="check">
<span class="input_checkbox">pseudocheckbox</span>
bla-bla
</label>
</body>
</html>
|
| Часовой пояс GMT +3, время: 02:39. |