Как использовать событие переключения с живым? - PullRequest
7 голосов
/ 01 октября 2010

У меня есть следующий код

$(".reply").toggle
(
    function ()
    {
        x1();
    },
    function ()
    {
        x2();
    }
);

Мне нужно использовать live, поэтому новые элементы также будут связаны.Есть ли какой-то синтаксис для этого?Или мне нужно будет реализовать toggle для события click?

Я использую jQuery 1.4.2.

Ответы [ 2 ]

13 голосов
/ 01 октября 2010

Только что изменил ответ fehay, чтобы он не полагался на то, что jQuery не присоединяет дубликаты обработчиков событий во время toggle()

$(".reply").live('click', function () {
    var toggled = $(this).data('toggled');
    $(this).data('toggled', !toggled);
    if (!toggled) {
        x1();
    }
    else {
        x2();
    }
});

Кроме того, имейте в виду, что селекторы для live должны быть какконкретный, насколько это возможно, из-за способа делегирования событий.Каждый раз, когда что-то щелкает по документу, jQuery должен подниматься вверх по дереву, проверяя, соответствует ли элемент селектору. По той же причине .delegate() гораздо более производительный, потому что вы можете ограничить область захвата.

3 голосов
/ 01 октября 2010

live поддерживает пользовательские события в jquery 1.4. Вы можете попробовать что-то вроде этого:

$(function () {
    $(".reply").live("customToggle", function () {
        $(this).toggle(
            function () {
                x1();
            },
            function () {
                x2();
            }
        );
    });

    $(".reply").live('click', function () {
        $(this).trigger('customToggle');
    });
});

это выглядит нормально, без пользовательского события:

$(".reply").live('click', function () {
    $(this).toggle(
            function () {
                x1();
            },
            function () {
                x2();
            }
        );
    $(this).trigger('click');
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...