Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Событие на label срабатывает дважды (https://javascript.ru/forum/dom-window/54733-sobytie-na-label-srabatyvaet-dvazhdy.html)

ivan22 30.03.2015 09:13

Событие на 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/

ksa 30.03.2015 09:26

Цитата:

Сообщение от 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>

laimas 30.03.2015 09:37

или
$('selector').click(function(e){
    e.preventDefault();
    //execution ...
});

ksa 30.03.2015 09:42

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>

Потом его предлагай... :)

laimas 30.03.2015 09:47

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

ksa 30.03.2015 09:57

Цитата:

Сообщение от laimas
Мой вариант не для его задачи

Панятна... :haha:

laimas 30.03.2015 10:07

$('ksa').click(function(e) :haha:


Часовой пояс GMT +3, время: 20:04.