click вызывается несколько раз
Как сделать чтобы click вызывался только на верхнем элементе?
Смотрим пример!
<!DOCTYPE HTML>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css">
body{
height: 150px;
background-color: #FFCC66;
}
</style>
<script src="http://code.jquery.com/jquery-2.1.4.js"></script>
</head>
<body>
<div id=id0 class=myclass>
<div id=id1 class=myclass>
<br>
1111111111<br>
</div>
<div id=id2 class=myclass>
<br>22222222222<br>
</div>
<br>Какой-то текст<br>
</div>
<script>
$('.myclass').click(function(){
alert('id= '+$(this).attr('id'));
});
</script>
</body>
</html>
|
в теории нужно добавить к селектору псевдоклас :first-child (если не ошибаюсь)
<!DOCTYPE HTML>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css">
body{
height: 150px;
background-color: #FFCC66;
}
</style>
<script src="http://code.jquery.com/jquery-2.1.4.js"></script>
</head>
<body>
<div id=id0>
<div id=id1 class=myclass>
<br>
1111111111<br>
</div>
<div id=id2 class=myclass>
<br>22222222222<br>
</div>
<br>Какой-то текст<br>
</div>
<script>
$('.myclass:first-child').click(function(){
alert('id= '+$(this).attr('id'));
});
</script>
</body>
</html>
PS: я проверил, не только в теории, но и на практике тоже ;) |
На практике в вашем примере click вызывается только для id1, к сожалению. А нужно чтобы для каждого, но только один раз вызывался и для всех div.
В моём примере еще простая структура, в рабочем документе там по 4-5 вложений, соответственно по 4-5 раз вызывается click. |
SKLNSK,
:-?
<!DOCTYPE HTML>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css">
body{
height: 150px;
background-color: #FFCC66;
}
</style>
<script src="http://code.jquery.com/jquery-2.1.4.js"></script>
</head>
<body>
<div id=id0 class=myclass>
<div id=id1 class=myclass>
<br>
1111111111<br>
</div>
<div id=id2 class=myclass>
<br>22222222222<br>
</div>
<br>Какой-то текст<br>
</div>
<script>
$('.myclass').click(function(){
var ok = !$(this).parents('.myclass').length;
ok && alert('id= '+$(this).attr('id'));
});
</script>
</body>
</html>
|
Цитата:
когда вы кликаете по любому елементу вы одновременно кликаете и по <div id=id0 class=myclass>, тоесть кликаете по елементу с класом myclass ДВАЖДЫ, я в своем примере выправил эту ошибку
<!DOCTYPE HTML>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css">
body{
height: 150px;
background-color: #FFCC66;
}
</style>
<script src="http://code.jquery.com/jquery-2.1.4.js"></script>
</head>
<body>
<div id=id0>
<div id=id1 class=myclass>
<br>
1111111111<br>
</div>
<div id=id2 class=myclass>
<br>22222222222<br>
</div>
<br>Какой-то текст<br>
</div>
<script>
$('.myclass').click(function(){
alert('id= '+$(this).attr('id'));
});
</script>
</body>
</html>
|
Убрав из корневого элемента класс myclass теперь он не кликается.
Нужно, чтобы все DIV'ы кликались по одному алгоритму. Один обработчик чтобы на всех был. |
Цитата:
<!DOCTYPE HTML>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css">
body{
height: 150px;
background-color: #FFCC66;
}
</style>
<script src="http://code.jquery.com/jquery-2.1.4.js"></script>
</head>
<body>
<div id=id0 class=myclass>
<div id=id1 class=myclass>
<br>
1111111111<br>
</div>
<div id=id2 class=myclass>
<br>22222222222<br>
</div>
<br>Какой-то текст<br>
</div>
<script>
$('.myclass').click(function(event){
event.stopPropagation();
alert('id= '+$(this).attr('id'));
});
</script>
</body>
</html>
|
Вставил в обработчик return false; Заработало!
Перелопатил кучу инета, сам догадался ) Вот пример:
<!DOCTYPE HTML>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css">
body{
height: 150px;
background-color: #FFCC66;
}
</style>
<script src="http://code.jquery.com/jquery-2.1.4.js"></script>
</head>
<body>
<div id=id0 class=myclass>
<div id=id1 class=myclass>
<br>
1111111111<br>
</div>
<div id=id2 class=myclass>
<br>22222222222<br>
</div>
<br>Какой-то текст<br>
</div>
<script>
$('.myclass').bind('click',function(){
alert('id= '+$(this).attr('id'));
return false;
});
</script>
</body>
</html>
|
| Часовой пояс GMT +3, время: 23:56. |