我有以下代码
$(".reply").toggle
(
function ()
{
x1();
},
function ()
{
x2();
}
);
我需要使用live
,因此新元素也会受到约束。有一些语法可以做到吗?或者我需要在toggle
事件上实施click
吗?
我正在使用jQuery 1.4.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');
});