Livequery запускает щелчок независимо от того, где пользователь щелкает в документе.

Я заменил традиционные элементы формы select/option изящным небольшим всплывающим окном при нажатии на изображение, вызывающее срабатывание. Страница предназначена для целей бухгалтерского учета, поэтому следует ожидать несколько позиций. Я написал javascript, который будет динамически генерировать новые элементы выбора/опции позиции. Когда страница загружается, загружается начальный набор вариантов, и пользователь может щелкнуть по ним, получить всплывающее окно с некоторыми вариантами, выбрать один, а затем окно закроется. Переход к следующему выбору и так далее и тому подобное. Я добавил livequery в свой код для этих динамических элементов. Однако... кажется, что livequery("click"...) срабатывает независимо от того, где пользователь щелкает на странице. Очень расстраивает.

Я читал здесь, насколько великолепен «live()» в jQuery 1.3, но я не могу полностью обновиться до jquery 1.3, потому что пользовательский файл JS зависит от 1.2, поэтому об использовании live() не может быть и речи. Я вызвал плагин livequery(), и мне действительно нужно понять, правильно ли я его использую.

Я опубликую частичный код. Там просто слишком много, чтобы опубликовать все это.

По сути, я ищу элементы div, начинающиеся с «пузыря», а затем номер. Затем запустите событие на каждом из них. Только пузырь 1 является статическим, 2 и выше — динамическими. Я пропустил все использование livequery?

>$jb('div[id^="bubble"]').each(function () {
> var divid = $jb('div[id^="bubble"]').filter(":first").attr("id");
>var pref = "bubble";
>var i = divid.substring((pref.length));
>var trigger = $jb('#trigger' + i, this);
>var popup = $jb('#pop'+ i, this).css('opacity', 0);
>var selectedoption = $jb('selectedOption' + i, this);
>var selectedtext = $jb('selectedOptionText' + i, this);
>$jb([trigger.get(0), popup.get(0)]).livequery("click",
> function () {
>//alert(i);
// code removed for brevity (just the contents of the popups)
>});

person CB.    schedule 07.12.2009    source источник


Ответы (1)


Live работает с использованием делегирования событий. Событие клика прикрепляется к телу, и каждый раз, когда что-то щелкают, селектор проверяется на соответствие цели. Если он проходит тест селектора, он вызывает функцию (таким образом имитируя событие щелчка).

Вы, вероятно, хотите что-то вроде этого:

$('div[id^="bubble"]').livequery("click", function() {
    var divId = $(this).attr("id");
    var i = divId.substring("bubble".length);
    var trigger = $("#trigger" + i, this);
    var popup = $("#pop" + i, this).css("opacity", 0);
    // alert(i);
}
person Caleb    schedule 07.12.2009