我正在创建一个使用knockout来加载页面组件html(以及该部分的javascript)的web应用程序。我发现了一个奇怪的问题:当我使用$(selector).on('event', handler)
时,处理程序永远不会被解雇。但如果我将其更改为$(selector).live('event', handler)
,那就更好了。我需要指出的是,当我调用该事件绑定语句时,$(selector).size() > 0
。
同样的问题导致我的$(selector).validate({onfocusout: validator})
无效。
有什么想法吗?
答案 0 :(得分:3)
根据我的理解,您正在动态加载此内容,这意味着您必须为on()
函数使用不同的语法。
$(document)
.on("eventName", selector, handler(event){
// handler
});
这是一种采用事件冒泡的方法。您将事件绑定到文档并将事件发生的元素与选择器匹配,并将此事件冒泡到文档级别,而不是将事件绑定到现有元素。
在这种情况下,最好使用此函数尽可能接近父级而不是document
。请记住,此父级必须在加载时存在于页面上。这样做的原因是为了优化性能并运行更顺畅的代码。
如果我理解第二个片段的目的,这应该可以解决问题:
$(document)
.on("blur", selector, function(){
$(this).validate();
});
我们将blur
事件委托给selector
匹配的元素,并在事件发生时验证它们(当焦点元素消失时发生blur
)。