Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 09.10.2013, 12:24
Интересующийся
Отправить личное сообщение для hellbeast92 Посмотреть профиль Найти все сообщения от hellbeast92
 
Регистрация: 08.10.2013
Сообщений: 12

наследование функции для вложенного блока
Всем здрасте, такая проблема:
есть два div-a:
<div class="d1">
<div class="d2"></div>
</div>
и функуия:
$('.d1').click(function(){
$(this).css({'display': 'none'}).transition({opacity: 0});
});
Вопрос: почему у div c классом d2 так же есть эта функция, каким, обазом она унаследовалась?
использую jq 2.0.3
Ответить с цитированием
  #2 (permalink)  
Старый 09.10.2013, 13:53
Аватар для mi.rafaylik
Кандидат Javascript-наук
Отправить личное сообщение для mi.rafaylik Посмотреть профиль Найти все сообщения от mi.rafaylik
 
Регистрация: 07.12.2012
Сообщений: 113

1. Событие срабатывает сначала на самом вложенном элементе .d2, а потом всплывает до указанного селектора .d1
Читайте про всплытие событий для понимания происходящего.
2. Если изменяемый css-параметр всего один, то вместо массива .css({'display':'none'}) можно .css('display', 'none')
3. И конечно вместо .css({'display':'none'}) просто .hide()

Последний раз редактировалось mi.rafaylik, 09.10.2013 в 14:39.
Ответить с цитированием
  #3 (permalink)  
Старый 09.10.2013, 17:20
Интересующийся
Отправить личное сообщение для hellbeast92 Посмотреть профиль Найти все сообщения от hellbeast92
 
Регистрация: 08.10.2013
Сообщений: 12

спасибо за ссылочку!
Ответить с цитированием
  #4 (permalink)  
Старый 09.10.2013, 18:17
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

это:
$('.d1').click(function(){
заменить на:
$(document).on('click', '.d1', function(){
или если версия jQuery старая то:
$(document).delegate('.d1', 'click', function(){
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #5 (permalink)  
Старый 10.10.2013, 12:56
Интересующийся
Отправить личное сообщение для hellbeast92 Посмотреть профиль Найти все сообщения от hellbeast92
 
Регистрация: 08.10.2013
Сообщений: 12

devote, мб я что-то делаю не так, но ваш метод не работает.
Ответить с цитированием
  #6 (permalink)  
Старый 10.10.2013, 13:12
Интересующийся
Отправить личное сообщение для hellbeast92 Посмотреть профиль Найти все сообщения от hellbeast92
 
Регистрация: 08.10.2013
Сообщений: 12

нашел вот такое вот решение, не уверен что оно "правильно", но точно рабочее http://nazz.me/return-false-preventd...oppropagation/
Ответить с цитированием
  #7 (permalink)  
Старый 10.10.2013, 13:13
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от hellbeast92
но ваш метод не работает.
когда вы кликаете по d2 вы так же кликаете и по d1 потому что d1 для d2 фактически является полотном. Что бы d1 не получал событие, его нужно прервать у d2. Для этого на d2 нужно повесить событие вида:
$('.d2').click(function(e){
    e.stopPropagation();
});
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #8 (permalink)  
Старый 10.10.2013, 13:39
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

вариант ...
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8" />
<style type="text/css">.d1{height:100px;width:100px;background:#F00;border-radius:50px;border:solid 1px #000}
.d2{height:50px;width:50px;margin:25% auto;background:#000;border-radius:25px;border:solid 1px #000;color:#FFFFFF; text-align: center;}
</style>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script type="text/javascript">
$(window).load(function(){
$('.d1').click(function(event){
 alert(event.target == this ? "Ok" : "No pasaran!")
 });
});
</script>
  <title></title>
</head>
<body>
<div class="d1">
 <div class="d2">d2</div>
 </div>
</body>
</html>
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Кросс-браузерные функции B~Vladi Ваши сайты и скрипты 128 01.09.2009 17:11
JavaScript Классическое наследование zzz Общие вопросы Javascript 67 17.08.2009 12:35
Проверка существования входного параметра для функции Axe Я не знаю javascript 2 25.05.2009 14:58
Применение функции для каждого элемента sergeygerasimov jQuery 2 26.11.2008 11:15