Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Не работает .off (https://javascript.ru/forum/jquery/32586-ne-rabotaet-off.html)

Shitbox2 22.10.2012 13:02

Не работает .off
 
Пример: http://jsfiddle.net/tamtakoe/8fbAH/3/
Суть в том, чтобы обработчик оставался только в последнем добавленном элементе, а из предыдущих удалялся бы. Почему-то .off ничего не удаляет в любых комбинациях

Serg_pnz 22.10.2012 13:17

var additem = function () {
  
      var $item = $('<div><input type="text"></div>')
      
      $('#cont').find('input').off( 'keyup.additem')
      
      $item.appendTo('#cont')
          
      $item.find('input').last().on( 'keyup.additem', function(e){
        additem()
      })
     
     
    
}
additem()

так?

Shitbox2 22.10.2012 17:22

Работает! Спасибо! А зачем используется .last()? Без него тоже работает.

Your 22.10.2012 17:35

last - выберет последний элемент. Английский хоть немного знаете?)

.last()

Shitbox2 22.10.2012 17:41

Немного знаю) А вы уберите ласт из своего кода и посмотрите что изменится. Я отличий не нашел...

Serg_pnz 22.10.2012 17:55

Shitbox2,
+1 за внимательность, если это внимательность ;)
Действительно last не нужен, т.к. событие вешаем конкретно на $item, точнее на input в нем.

Shitbox2 22.10.2012 18:11

Кстати, первый раз вешал обработчик на весь контейнер, но получается странный эффект:
$('cont').on( 'keyup', 'div:last-child input', function) //работает
$('cont').on( 'keyup', 'div:eq(-1) input', function) //не работает
(а в моем случае понадобится :eq(-2))
Решили на другом форуме, что это баг JQ. Или этому есть объяснение?

Serg_pnz 22.10.2012 18:54

Shitbox2,
оба варианта работают, если обращаться $('#cont')

Shitbox2 22.10.2012 19:02

Опечатался, пока писал сюда. Пример из жизни: http://jsfiddle.net/tuJnv/8/
Меняем last-child на eq(-...) и не пашет (на вновь созданных элементах)

Shitbox2 22.10.2012 20:11

Чуть упростил пример http://jsfiddle.net/tamtakoe/tuJnv/10/


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