Javascript.RU

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

Странная обработка события в элементе ajax
Есть два div, в div#1 список ul. При клике на любом элементе этого списка асинхронно подгружается еще один список ul в div#2. Все элементы обоих списков имеют класс li.link

Пытаюсь сделать, что бы по клику на li любого списка менялся его цвет с голубого на черный. В div#1 это работает отлично. В div#2 элемент li при клике на мгновение меняет цвет на черный и опять СТАНОВИТСЯ СИНИМ!!
Сломал моск, не могу понять почему так.
<script type="text/javascript">

$(document).ready(function(){
    $(document).on("click", "li.link", function(){        
        $("#r2").load("include.php"); 
        $("li.link").css("color","#006699");  
        $(this).css("color","#000");
     });
    $(document).off("li.link");

});  
</script>

<style>
.link{
    color:#006699;
    text-decoration:underline;
    cursor:pointer;
}
.link:hover{
    text-decoration:none;
}
</style>

<div id="r1">
<ul>
<li class="link">Строка 1</li>
<li class="link">Строка 2</li>
</ul>
</div>
<div id="r2"></div>


includ.php
<ul>
<li class="link">Строка 1</li>
<li class="link">Строка 2</li>
</ul>
Ответить с цитированием
  #2 (permalink)  
Старый 09.02.2013, 12:50
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

grecha, каждый раз у вас стирается содержимое r2
Ответить с цитированием
  #3 (permalink)  
Старый 09.02.2013, 12:59
Интересующийся
Отправить личное сообщение для grecha Посмотреть профиль Найти все сообщения от grecha
 
Регистрация: 09.02.2013
Сообщений: 10

рони, да, при каждом клике стирается содержимое все верно. В реале туда выводятся разные списки, в зависимости от кликнутого li#id, я убрал эту инфу ибо не имеет отношения к вопросу.

Но почему после $(this).css("color","#000"); цвет снова меняется на #006699?
Ответить с цитированием
  #4 (permalink)  
Старый 09.02.2013, 13:06
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

grecha,
вы установили цвет --- потом пришла новая информация и стёрла ваши установки -- того у чего вы установили нет уже -- для облегчения понимания представте что load сработает самым последним в коде
Ответить с цитированием
  #5 (permalink)  
Старый 09.02.2013, 13:08
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

grecha,
вот так будет цвет менятся но загрузка будет 1 раз
if(!$("#r2 .link").length)  $("#r2").load("include.php") ;
Ответить с цитированием
  #6 (permalink)  
Старый 09.02.2013, 13:18
Интересующийся
Отправить личное сообщение для grecha Посмотреть профиль Найти все сообщения от grecha
 
Регистрация: 09.02.2013
Сообщений: 10

рони,
вы хотите сказать что в моем коде load срабатывает 2 раза?
а. load загружает данные в div#2
б. $.css устанавливает стиль li (черный)
в. load загружает данные в div#2 повторно.

но почему? мне нужно разобраться в этом, ваш пример к сожалению не подходит - загрузка не одноразовая, переходов/кликов > 1.
Ответить с цитированием
  #7 (permalink)  
Старый 09.02.2013, 13:20
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

grecha,
так загружайте только из r1
Ответить с цитированием
  #8 (permalink)  
Старый 09.02.2013, 13:25
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

grecha,
if($(this).parents("#r1").length)  $("#r2").load("include.php") ;
Ответить с цитированием
  #9 (permalink)  
Старый 09.02.2013, 13:27
Интересующийся
Отправить личное сообщение для grecha Посмотреть профиль Найти все сообщения от grecha
 
Регистрация: 09.02.2013
Сообщений: 10

Сообщение от рони Посмотреть сообщение
grecha,
так загружайте только из r1
Не, ну так можно вообще все данные на страницу списком вывести и без технологий обойтись Но мы же не оформление обсуждаем

В реале там 4х уровневый (div#1-4)классификатор и нужно видеть весь путь выбора - это важно, в этом соль.

Все таки хотелось бы понять причину такого поведения скрипта и метод багфикса.
Ответить с цитированием
  #10 (permalink)  
Старый 09.02.2013, 13:33
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

grecha,
причина изложена выше вы на ходу хотите поменять колёса.кликнув по элементу из r2 вы его уничтожаите.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработка события после закрытия модального окна byaka Events/DOM/Window 3 11.08.2012 19:19
Обработка Ajax запроса shilinpavel AJAX и COMET 4 22.05.2012 16:55
Обработка данных во время AJAX запроса user783 AJAX и COMET 5 09.12.2011 03:24
Не срабатывают события на элементе <option> DreamTheater Events/DOM/Window 2 14.06.2011 20:24
Обработка события элемента внутри создавшего его объекта pauluss Общие вопросы Javascript 10 10.09.2010 17:01