Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 28.10.2014, 09:19
Аватар для utb
utb utb вне форума
Аспирант
Отправить личное сообщение для utb Посмотреть профиль Найти все сообщения от utb
 
Регистрация: 26.10.2011
Сообщений: 94

Стилизация 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()


Помогите разобраться.

з.ы. Совет использовать плагин не нужен, т.к. это не для сайта, а для себя

Последний раз редактировалось utb, 28.10.2014 в 09:22.
Ответить с цитированием
  #2 (permalink)  
Старый 28.10.2014, 09:49
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,121

Сообщение от utb
Как правильно отловить это событие от label ?
При клике на label остается только поменять внешний вид чека. Больше вообще ничего "ловить" и делать не нужно...
Ответить с цитированием
  #3 (permalink)  
Старый 28.10.2014, 09:50
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,121

Статейка на эту тему...
http://xiper.net/collect/html-and-cs...i-radio-na-css
Ответить с цитированием
  #4 (permalink)  
Старый 28.10.2014, 11:58
Аватар для utb
utb utb вне форума
Аспирант
Отправить личное сообщение для utb Посмотреть профиль Найти все сообщения от utb
 
Регистрация: 26.10.2011
Сообщений: 94

Label передает клик автоматически в инпут, не ?
получается дабл клик
проблема не в том, что я не могу привязать. а хочу разобраться) для себя, учусь использовать js/jquery
Ответить с цитированием
  #5 (permalink)  
Старый 28.10.2014, 14:38
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,121

Сообщение от utb
Label передает клик автоматически в инпут, не ?
Вот это и нужно использовать! А не бороться с этим...
Ответить с цитированием
  #6 (permalink)  
Старый 31.10.2014, 07:33
Аватар для utb
utb utb вне форума
Аспирант
Отправить личное сообщение для utb Посмотреть профиль Найти все сообщения от utb
 
Регистрация: 26.10.2011
Сообщений: 94

Сообщение от ksa Посмотреть сообщение
При клике на label остается только поменять внешний вид чека. Больше вообще ничего "ловить" и делать не нужно...
Сообщение от ksa Посмотреть сообщение
Вот это и нужно использовать! А не бороться с этим...
ok,
а если пользователь кликает по псевдочекбоксу, он автоматически кликает и по label, т.к. псевдочекбокс вложен в label:

label
  input type="checkbox"
  span.pseudocheckbox
Ответить с цитированием
  #7 (permalink)  
Старый 31.10.2014, 08:45
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,121

Сообщение от utb
а если пользователь кликает по псевдочекбоксу, он автоматически кликает и по label, т.к. псевдочекбокс вложен в label
Как же тебе еще объяснить... Неиспользуй другие клики. Лабель все сделает за тебя. При клике на нее просто меняй внешний вид и все. Значение в настоящем чеке само поменяется.

Ничего больше мудрить не нужно.

<!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>
Ответить с цитированием
  #8 (permalink)  
Старый 31.10.2014, 09:56
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

по желанию ... .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>
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проблема с checkbox Chrome Элементы интерфейса 1 23.10.2013 18:05
checkbox = checkbox Слейп jQuery 2 30.01.2013 15:24
Не могу получить состояние checkbox-а POMAH-UST Элементы интерфейса 2 08.10.2012 07:43
jqgrid tree and checkbox gaz2003 jQuery 0 17.12.2011 15:59
Функция disable для нескольких checkbox allforweb Элементы интерфейса 4 19.12.2010 17:51