Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 30.03.2015, 09:13
Интересующийся
Отправить личное сообщение для ivan22 Посмотреть профиль Найти все сообщения от ivan22
 
Регистрация: 16.09.2011
Сообщений: 15

Событие на label срабатывает дважды
Добрый день, подскажите, где почитать, почему событие при клике на лэйбл с вложенным инпутом срабатывает дважды и как это побороть (избегая for/id)?

<label class="label checked"><input type="checkbox" checked="checked"  /> Внутри </label>
<label class="label"><input type="checkbox"  />Внутри</label>
<input type="checkbox" checked="checked"   /><label class="label checked" for="n1"> Вне</label>
<input type="checkbox" id="n2"  data-total="13000"  /><label class="label" for="n2"> Вне</label>


jQuery(document).ready(function(){
  jQuery('label').click(function(){
    jQuery(this).toggleClass("checked");
  });
});


Ссылка на живой код http://jsfiddle.net/e3vt7y1x/
Ответить с цитированием
  #2 (permalink)  
Старый 30.03.2015, 09:26
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Сообщение от ivan22
почему событие при клике на лэйбл с вложенным инпутом срабатывает дважды
Ну вот такая особенность этого контрола...
Сообщение от ivan22
как это побороть
Как вариант...

<!DOCTYPE html>
<html>
<head>
<script src='http://code.jquery.com/jquery-latest.js'></script>
<!--
<script src="https://code.angularjs.org/1.3.9/angular.min.js"></script>
<script src="https://code.angularjs.org/1.3.9/angular-route.js"></script>
<link rel='stylesheet type=text/css href=tmp.css' />
-->
<style type='text/css'>
.checked {
	color: red;
}
</style>
<script type='text/javascript'>
$(function(){
	$('label').mouseup(function(){
		$(this).toggleClass("checked");
	});
});
</script>
</head>
<body>
<label class="label checked"><input type="checkbox" checked="checked"  /> Внутри </label>
<label class="label"><input type="checkbox"  />Внутри</label>
<input type="checkbox" id='n1' checked="checked"   /><label class="label checked" for="n1"> Вне</label>
<input type="checkbox" id="n2"  data-total="13000"  /><label class="label" for="n2"> Вне</label>
</body>
</html>
Ответить с цитированием
  #3 (permalink)  
Старый 30.03.2015, 09:37
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

или
$('selector').click(function(e){
    e.preventDefault();
    //execution ...
});
Ответить с цитированием
  #4 (permalink)  
Старый 30.03.2015, 09:42
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

laimas, ты сначала посмотри как твой вариант работает...

<!DOCTYPE html>
<html>
<head>
<script src='http://code.jquery.com/jquery-latest.js'></script>
<!--
<script src="https://code.angularjs.org/1.3.9/angular.min.js"></script>
<script src="https://code.angularjs.org/1.3.9/angular-route.js"></script>
<link rel='stylesheet type=text/css href=tmp.css' />
-->
<style type='text/css'>
.checked {
	color: red;
}
</style>
<script type='text/javascript'>
$(function(){
	$('label').click(function(e){
		e.preventDefault();
		$(this).toggleClass("checked");
	});
});
</script>
</head>
<body>
<label class="label checked"><input type="checkbox" checked="checked"  /> Внутри </label>
<label class="label"><input type="checkbox"  />Внутри</label>
<input type="checkbox" id='n1' checked="checked"   /><label class="label checked" for="n1"> Вне</label>
<input type="checkbox" id="n2"  data-total="13000"  /><label class="label" for="n2"> Вне</label>
</body>
</html>

Потом его предлагай...
Ответить с цитированием
  #5 (permalink)  
Старый 30.03.2015, 09:47
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989


Мой вариант не для его задачи, а как предотвратить действие по умолчанию. А чтобы знать почему так происходит, пусть смотрит этот вариант:
$(function() {
    $('label').click(function(e){
        console.log(e.target.tagName)
    });
});

Последний раз редактировалось laimas, 30.03.2015 в 10:02.
Ответить с цитированием
  #6 (permalink)  
Старый 30.03.2015, 09:57
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Сообщение от laimas
Мой вариант не для его задачи
Панятна...
Ответить с цитированием
  #7 (permalink)  
Старый 30.03.2015, 10:07
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

$('ksa').click(function(e)
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не срабатывает событие mouseup в chrome Евгений_Лазаренко Events/DOM/Window 6 28.01.2015 12:06
Вопрос по backbone - не срабатывает событие vuler Общие вопросы Javascript 4 28.12.2014 21:20
Событие на теге input срабатывает несколько раз hrundel Events/DOM/Window 3 15.12.2013 14:49
Не срабатывает событие open для диалогового окна jquery-ui mihail_p AJAX и COMET 4 19.06.2013 22:23
Некорректно срабатывает событие DZHETIGAPA Events/DOM/Window 4 12.05.2011 22:28