Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Разные события для одного и того же элемента (https://javascript.ru/forum/jquery/18755-raznye-sobytiya-dlya-odnogo-i-togo-zhe-ehlementa.html)

kpoxo6op 14.07.2011 07:51

Разные события для одного и того же элемента
 
Добрый день.

У меня есть неупроядоченный список ul в контейнере colleft. При щелчке на элемент li он меняет класс на selected, и под ним появляется div с кнопками внутри: "Переименовать", "Удалить" и т.п..
Мне нужно отвязать от щёлкнутого li появление div-а и смену класса по нажатию кнопки "Переименовать" и привязать другое событие.

Общий смысл такой: нажал на элемент - появилось меню управления им. После щелчка на определённый пункт меню повторное нажатие на выбранный элемент вызывает уже другое действие с этим элементом - удаление, переименование, в зависимости от нажатой кнопки меню.

walik 14.07.2011 09:17

.bind(), .unbind() ?

kpoxo6op 14.07.2011 09:40

Цитата:

Сообщение от walik (Сообщение 113217)
.bind(), .unbind() ?

Я догадывался, что надо что-то делать с ними. Можно где-нибудь пример посмотреть, где у одного элемента сначала одно, а потом другое событие, после нажатия кнопки типа "Переключить"?

kpoxo6op 16.07.2011 08:25

$(document).ready(function () {

   //функция показывания дива
   function showDiv() {
   
      $(this).addClass("selected").after("<div class=\"test\">многочисленные кнопки и формы</div>");
      
   }
   
   //функция показывания дива showDiv привязывается ко всем элементам colleft li

   $(".colleft li").live("click", showDiv);

   //кнопка unbind - отвязать событие показывания дива, убрать стиль selected, задать стиль edit   
   
   $("#unbind").click(function () {
   
      $("li.selected").die("click", showDiv).removeClass("selected").addClass("edit");
   
    });

});


почему не работает?

kpoxo6op 16.07.2011 08:38

$(document).ready(function () {

   //функция показывания дива
   function showDiv() {
   
      $(this).addClass("selected").after("<div class=\"test\">многочисленные кнопки и формы</div>");
      
   }
   
   //функция показывания дива showDiv привязывается ко всем элементам colleft li

   $(".colleft li").bind("click", showDiv);

   //кнопка unbind - отвязать событие показывания дива, убрать стиль selected, задать стиль edit   
   
   $("#unbind").click(function () {
   
      $("li.selected").unbind("click", showDiv).removeClass("selected").addClass("edit");
   
    });

});


то же самое с bind и unbind работает. В чём секрет?

nikita.mmf 16.07.2011 11:16

$(function(){

$(".colleft").delegate("li", "click", function(){
  var $listItem = $(this);
  if ( $listItem.hasClass("edit") ) {
  } else if ( $listItem.hasClass("selected") ) {
    $listItem.removeClass("selected").addClass("edit");
  } else {
    $listItem.addClass("selected");
  }
})

});

kobezzza 16.07.2011 23:51

Возьмите за правило, что в 90% лучше делегирование событий, чем прямое привязывание)


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