Livequery запускает щелчок независимо от того, где пользователь щелкает в документе - PullRequest
0 голосов
/ 07 декабря 2009

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

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

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

По сути, я ищу div, начинающиеся с "bubble", а затем числа после. Затем запустите мероприятие на каждом из них. Только bubble1 является статическим, 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)
>});

1 Ответ

0 голосов
/ 07 декабря 2009

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);
}
...