jQuery - кажется, что .live () не привязывается к элементу метки. Зачем? - PullRequest
1 голос
/ 04 июня 2010

Вот мой код:

HTML:

<ul id="more-items">
   <li><label class="button">hi</label></li>
   <li><label class="button">hi</label></li>
   <li><label class="button">hi</label></li>
</ul>

Javascript:

$('ul#more-items label.button').live('click', function()
{
   alert(1);
});

Нажатие на ярлыки не приводит к срабатыванию оповещения (). Привязка .live (), похоже, не влияет на элемент label ...

Если я изменю его на использование .click () или даже .bind (), он будет работать отлично. Есть ли причина, по которой .live () не работает? Есть ли способ это исправить?

Причина, по которой я использую .live (), заключается в том, что ul#more-items будет считываться на страницу несколько раз, и я не хочу запускать функцию каждый раз, когда случается повторное нажатие кнопки. *

Ответы [ 6 ]

6 голосов
/ 04 июня 2010

Метод jQuery live() для работы использует пузыри событий (вплоть до корневого узла).

Если есть какой-либо код, который остановит всплывание события на label или любом из его предков, live() не будет работать.

Есть ли вероятность, что у label или одного из его предков есть обработчик с одним из следующих?

return false;

или

event.stopPropagation();

Если это так, live() не удастся.


Соответствующие документы jQuery:

1 голос
/ 04 июня 2010

Идентификаторы элементов должны быть уникальными. Ваше замечание «Причина, по которой я использую .live (), заключается в том, что ul # more-items будут добавлены на страницу несколько раз ...» говорит мне, что у вас будет несколько из них:

<ul id="more-items"> 
  <!--Stuff-->
</ul>
<ul id="more-items"> 
  <!--Stuff-->
</ul>

Это будет недопустимый HTML, поскольку идентификатор more-items существует дважды.

0 голосов
/ 04 июня 2010

Вы можете попробовать это. Может работать

Изменение:

$('ul#more-items label.button').live('click', function() 
{ 
   alert(1); 
}); 

К этому:

$('ul#more-items label.button').unbind('click').live('click', function() 
{ 
   alert(1); 
}); 
0 голосов
/ 04 июня 2010

Ваш код работает на меня. Какую версию jquery вы используете? Вы определяете JavaScript в функции $ (document) .ready?

0 голосов
/ 04 июня 2010

Вроде бы нормально, но ваше оповещение должно быть настороже («1»);

или

var 1 = "1";

оповещения (1);

0 голосов
/ 04 июня 2010

1001 * попробовать *

$('label.button').live('click', function()
{
   alert(1);
});

или

$('ul#more-items').delegate('label.button','click', function()
{
   alert(1);
});
...