有没有办法使用“bind”语法来绑定“toggle”事件处理程序?
从文档中我可以理解正确的方法是:
$('.selector').toggle( function() {}, function() {} );
我的问题是,由于某些原因,我正在删除该元素,然后再将其添加到DOM中。但是,再次添加后,切换不起作用。
因此,我认为应该有一种方法来“绑定”切换。
请帮忙解决。
这是我正在遵循的文档: http://jqapi.com/#p=toggle
有没有办法使用“bind”语法来绑定“toggle”事件处理程序?
从文档中我可以理解正确的方法是:
$('.selector').toggle( function() {}, function() {} );
.live()
或.delegate()
来为所有现有和未来的元素添加处理程序。.toggle()
绑定了click事件,在复杂情况下,如使用.live()
或.delegate()
,你需要自己编写代码。从jQuery文档中可以看到:
自己编写切换函数(可以轻松地扩展为N个切换函数,使用mod N而不是mod 2 - 但是这时必须使用switch而不是JS条件运算符):为了方便起见,提供了.toggle()方法。通过手动实现相同的行为相对容易,如果内置的.toggle()方法限制了某些假设,则可能需要手动实现。
var counter = 1;
$('.selector').live("click", function() {
counter++ % 2 ?
// First set of actions :
// Second set of actions;
});
如果您想要包含2个函数,那么它们必须是自执行的。这对于传递参数非常有用...因此表单应该是:
var counter = 1;
$('.selector').live("click", function() {
counter++ % 2 ?
(function() { ... }()) : // <== First function
(function() { ... }()); // <== Second function
});
(function() {
var counter = 1;
$('.selector').live("click", function() {
counter++ % 2 ?
$("div").html("First one!") :
$("div").html("Numero dos!");
});
$(function() {
$("body").prepend('<input type="button" ' +
'class="selector" value=" Click Me! " />');
});
}());
一个更复杂的例子(使用了参数):
(function() {
var counter = 1;
$('.selector').live("click", function() {
// Note that the self executing functions are only
// necessary if you want to use arguments.
counter++ % 2 ?
(function() {
$("div").html("First one! Num: " + ($(event.target).index() + 1))
}(event)) :
(function() {
$("div").html("Numero dos! Num: " + ($(event.target).index()+1))
}(event));
});
$(function() {
$elie = $('<input type="button" class="selector" value="Click Me!" />');
$elie.clone().prependTo("body");
$elie.clone().prependTo("body");
$elie.clone().prependTo("body");
});
}());
$(function() {
$('input').click(function() {
$('#id').trigger('toggle')
});
$('#id').bind('toggle', function() {
$(this).toggle()
});
});
尝试这个示例:http://jsbin.com/ixapo4/2
.detach()
将元素从DOM中取出,则上述操作就没有必要了,因为可以直接在原始元素上使用.toggle()
。 - Peter Ajtai$(elementSelector).toggle();
。换句话说,您的代码可以简化为==> $('input').click(function() { $('#id').toggle(); });
。但这只是问题的标题。问题的正文描述了更多的问题。 - Peter Ajtai.live()
绑定一个动作。.toggle()
是一个 jQuery 方法,它绑定了 click
动作。我不确定如何使用 .live()
来绑定 .toggle()
。你能提供一个例子吗? - Peter Ajtai