Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как получить id объекта 
:(
    Опции темы
MrDmitry
Дата 17.1.2013, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 556
Регистрация: 10.11.2006

Репутация: нет
Всего: нет



Всем привет. Написал не большой код:

Код

object=$(this).attr('id');
               if (test!=object){
                 alert(test);
                 document.getElementById('li_'+object).className='active'; 
                 document.getElementById('li_'+test).className='noactive';
                }
              else
               {
                document.getElementById('li_'+object).className='noactive';
               }
              test=object;    


Вроде бы код достаточно простой и мне кажется что он должен работать. Однако в alert(test) всегда появляется  [object htmldivelement]. А код 
Код

test=object;    


Просто не выполняется ((( Если же например убрать строчку 
Код

document.getElementById('li_'+test).className='noactive';


то alert(test); выводит мне сообщение с id дива. Но я в упор не понимаю как это строчка может влиять на работу кода? ((((
PM MAIL   Вверх
Amphiluke
Дата 17.1.2013, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


Профиль
Группа: Завсегдатай
Сообщений: 1253
Регистрация: 26.8.2009

Репутация: 39
Всего: 112



Где и как происходит присваивание значения переменной test?
PM   Вверх
MrDmitry
Дата 17.1.2013, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 556
Регистрация: 10.11.2006

Репутация: нет
Всего: нет



В сам низу кода 

Код

test=object;   


разве нет?


PS забыл наверное сказать что это часть функциии которая вызывается по клику на ссылке. 

полный код 



Код

<html>
 <head>
   <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.min.js"></script>
   <script>
    var test;
    var object;
     $('#href').live('click', function(event){
       object=$(this).attr('id');
        if (test!=object){
                 alert(test);
                 document.getElementById('li_'+object).className='active'; 
                 document.getElementById('li_'+test).className='noactive';
                }
              else
               {
                document.getElementById('li_'+object).className='noactive';
               }
              test=object; 
             });   
   </script>
 </head>
 <body> 
<ul>
  <li id='li_href' class='noactive'><a href="#" id='href'>Тест</a></li>
  <li id='li_href1' class='noactive'><a href="#" id='href1'>Тест</a></li>
  <li id='li_href1' class='noactive'><a href="#" id='href1'>Тест</a></li>
  </ul>
 </body>
</html>


Это сообщение отредактировал(а) MrDmitry - 17.1.2013, 21:23
PM MAIL   Вверх
Amphiluke
Дата 17.1.2013, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


Профиль
Группа: Завсегдатай
Сообщений: 1253
Регистрация: 26.8.2009

Репутация: 39
Всего: 112



Цитата(MrDmitry @  17.1.2013,  23:22 Найти цитируемый пост)
полный код 

Если это полный код, то в консоли у вас должны валиться ошибки о том, что
document.getElementById("li_" + object) == null
и
document.getElementById('li_'+test) == null
PM   Вверх
MrDmitry
Дата 17.1.2013, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 556
Регистрация: 10.11.2006

Репутация: нет
Всего: нет



отредактировал 3 пост. В коде видно откуда берется 
Код

document.getElementById("li_" + object)


В общем смысл всего этого кода следующий. Есть кнопочки. Когда на неё нажимаешь она должна поменять класс и выглядеть активной, если нажата другая кнопка, то предыдущая кнопка должна стать не активной а нажатая кнопка стать активной. 

Я пытался сделать следующим образом. В переменную test записывается id предыдущей нажатой ссылки. затем мы сравниваем id вновь нажатой ссылки с id предыдущей нажатой ссылки. Если они различаются то у li (В котором находится наша ссылка с id) мы меняем класс на active, у предыдущей меняем класс на noactive. Иначе если предыдущая id равна вновь нажатой (нажали по ссылки повторно) то делаем вновь нажатую li не активной. По логике вещей все должно работать. Если не тот факт что в test приходит не id объекта а сам объект.  если же убрать строчку 
Код

document.getElementById('li_'+test).className='noactive';

то в test приходит id ссылки но логика нарушается (

Это сообщение отредактировал(а) MrDmitry - 17.1.2013, 21:35
PM MAIL   Вверх
Amphiluke
Дата 17.1.2013, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


Профиль
Группа: Завсегдатай
Сообщений: 1253
Регистрация: 26.8.2009

Репутация: 39
Всего: 112



Я бы на вашем месте, во-первых, обновил используемую версию jQuery, чтобы не использовать deprecated-методы типа .live(). Если это невозможно, то реализация в вашем случае может быть такой (не нужно создавать дополнительные глобальные переменные и т.д.):

Код

<html>
 <head>
 <style type="text/css">
 .active a { color:red; }
 .noactive a { color:black; }
 </style>
   <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.min.js"></script>
 </head>
 <body> 
<ul id="menu">
  <li id='li_href' class='noactive'><a href="#" id='href'>Тест</a></li>
  <li id='li_href1' class='noactive'><a href="#" id='href1'>Тест</a></li>
  <li id='li_href2' class='noactive'><a href="#" id='href2'>Тест</a></li>
</ul>
<script type="text/javascript">
    $("#menu a").click(function () {
        var link = $(this),
            li = link.closest("li");
        li.siblings().removeClass("active").addClass("noactive");
        if (li.hasClass("active")) {
            li.removeClass("active").addClass("noactive");
        } else {
            li.removeClass("noactive").addClass("active");
        }
    });
</script>
 </body>
</html>

PM   Вверх
MrDmitry
Дата 17.1.2013, 22:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 556
Регистрация: 10.11.2006

Репутация: нет
Всего: нет



Извините за вопрос который возможно не совсем относится к теме. Но почему не стоит использовать методы .live().? и какая сейчас последняя стабильная версия jquery? гугл выдал мне 1.9.0. Это оно? )
PM MAIL   Вверх
Arantir
Дата 17.1.2013, 22:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


Профиль
Группа: Участник
Сообщений: 960
Регистрация: 18.11.2012

Репутация: 5
Всего: 55



Цитата(MrDmitry @  17.1.2013,  21:11 Найти цитируемый пост)
Извините за вопрос который возможно не совсем относится к теме. Но почему не стоит использовать методы .live().?
Почему сейчас дома не обогревают дровами? Ну вот примерно по той же причине, но только из сферы программирования.

Цитата(MrDmitry @  17.1.2013,  21:11 Найти цитируемый пост)
 гугл выдал мне 1.9.0. Это оно? ) 
jQuery не в подпольном цеху делают, у них есть собственный сайт - http://jquery.com/ =) Там всегда на 100% точная актуальнейшая информация по jquery.


--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0864 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.