如何使用实时切换事件?

时间:2010-10-01 17:51:01

标签: jquery events

我有以下代码

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

我需要使用live,因此新元素也会受到约束。有一些语法可以做到吗?或者我需要在toggle事件上实施click吗?

我正在使用jQuery 1.4.2。

2 个答案:

答案 0 :(得分:13)

刚刚修改了fehay的答案,以便它不依赖于jQuery在toggle()期间不附加重复的事件处理程序

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

此外,请记住,由于事件委派的工作方式,live的选择器必须尽可能具体。每次点击文档时,jQuery都必须爬上树检查元素是否与选择器匹配。出于同样的原因,.delegate()性能更高,因为你可以限制捕获区域。

答案 1 :(得分:3)

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