使用“on”时不会触发JQuery事件

时间:2012-02-29 06:19:14

标签: jquery events

我正在创建一个使用knockout来加载页面组件html(以及该部分的javascript)的web应用程序。我发现了一个奇怪的问题:当我使用$(selector).on('event', handler)时,处理程序永远不会被解雇。但如果我将其更改为$(selector).live('event', handler),那就更好了。我需要指出的是,当我调用该事件绑定语句时,$(selector).size() > 0

同样的问题导致我的$(selector).validate({onfocusout: validator})无效。

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

根据我的理解,您正在动态加载此内容,这意味着您必须为on()函数使用不同的语法。

$(document)
    .on("eventName", selector, handler(event){
        // handler
    });

这是一种采用事件冒泡的方法。您将事件绑定到文档并将事件发生的元素与选择器匹配,并将此事件冒泡到文档级别,而不是将事件绑定到现有元素。

在这种情况下,最好使用此函数尽可能接近父级而不是document。请记住,此父级必须在加载时存在于页面上。这样做的原因是为了优化性能并运行更顺畅的代码。

如果我理解第二个片段的目的,这应该可以解决问题:

$(document)
    .on("blur", selector, function(){
        $(this).validate();
    });

我们将blur事件委托给selector匹配的元素,并在事件发生时验证它们(当焦点元素消失时发生blur)。