使用JQuery函数.live()设置超时

使用JQuery函数.live()设置超时,jquery,live,settimeout,Jquery,Live,Settimeout,我有这个: function toggle() { $('#clbttn').fadeOut('fast'); $('#msg').fadeOut('fast'); setTimeout(function() { $('#msg').remove(); $('#clbttn').remove(); }, 200); } $('#clbttn').live('click', toggle()); 因此,我有: 未捕获的TypeError:对象#clbttn没有方法“应用”

我有这个:

function toggle() {
    $('#clbttn').fadeOut('fast');
    $('#msg').fadeOut('fast');
    setTimeout(function() { $('#msg').remove(); $('#clbttn').remove(); }, 200);
}
$('#clbttn').live('click', toggle());
因此,我有: 未捕获的TypeError:对象#clbttn没有方法“应用”


有人知道我应该做什么吗?

您应该将
toggle()
更改为
toggle
,因为前者是一个函数调用

$('#clbttn').live('click', toggle);

您应该将
toggle()
更改为
toggle
,因为前者是一个函数调用

$('#clbttn').live('click', toggle);

live已过时,jquery建议使用

从jQuery1.7开始,不推荐使用.live()方法。使用.on()来 附加事件处理程序。jQuery旧版本的用户应使用 .delegate()优先于.live()

此方法提供了将委托事件处理程序附加到 页面的文档元素,它简化了事件处理程序的使用 将内容动态添加到页面时。参见对 方法中的直接事件与委派事件,了解更多信息 信息


live已过时,jquery建议使用

从jQuery1.7开始,不推荐使用.live()方法。使用.on()来 附加事件处理程序。jQuery旧版本的用户应使用 .delegate()优先于.live()

此方法提供了将委托事件处理程序附加到 页面的文档元素,它简化了事件处理程序的使用 将内容动态添加到页面时。参见对 方法中的直接事件与委派事件,了解更多信息 信息


正如Jason所说,
live
已被弃用,应替换为上的
。但是,不要这样做:

$('#clbttn').on('click', toggle);
这将不适用于动态添加的内容,因为它不会设置委派的事件处理程序。上述情况相当于

$('#clbttn').bind('click', toggle);
要在
上使用动态添加的内容,您需要:

$(document).on('click', '#clbttn', toggle);
这将告诉jQuery监听所有指向文档根的点击,并在点击来自id为
clbttn
的元素时启动切换功能。如果您知道这个元素只会出现在id为
foo
的div中,那么您可以更高效地将其编写为

$("#foo").on('click', '#clbttn', toggle);

正如Jason所说,
live
已被弃用,应替换为上的
。但是,不要这样做:

$('#clbttn').on('click', toggle);
这将不适用于动态添加的内容,因为它不会设置委派的事件处理程序。上述情况相当于

$('#clbttn').bind('click', toggle);
要在
上使用动态添加的内容,您需要:

$(document).on('click', '#clbttn', toggle);
这将告诉jQuery监听所有指向文档根的点击,并在点击来自id为
clbttn
的元素时启动切换功能。如果您知道这个元素只会出现在id为
foo
的div中,那么您可以更高效地将其编写为

$("#foo").on('click', '#clbttn', toggle);

您正在将
toggle
的返回值(不是函数)传递到
live
。您正在将
toggle
的返回值(不是函数)传递到
live
。是的,它可以工作。非常感谢。但我还有一个问题。。。为什么一个月都没问题?真的很奇怪,是的,很有效。非常感谢。但我还有一个问题。。。为什么一个月都没问题?真奇怪。