2010-04-06 25 views
1

我使用Brandon Aaron的可扩展插件在窗体中自动生成我的textareas,并且它工作正常。 问题是我通过ajax加载了很多页面,所以我需要将插件方法重新绑定到通过ajax加载的textareas。如何自动绑定通过ajax加载的内容的插件初始化

是有办法做到这种方法就像

$("textarea").expandable(); 

通过现场()或委托()jQuery中调用。它会使我的代码更清洁。

回答

2

.liveQuery plugin仍具有使用这里,它不是完全的jQuery核心的.live()取代,这里是你的例子是如何工作的:

$("textarea").liveQuery(function() { 
    $(this).expandable(); 
}); 

.livequery()其实手表新的元素,不同于.live()监听事件为了鼓舞DOM,它们以非常不同的方式运行。

+0

谢谢你,这实际上是我的一天。在1.4发布之后,我完全忘记了liveQuery插件,因为他们添加了实时提交和模糊,这是liveQuery无法实现的。谢谢你提醒我。 – 2010-04-07 13:31:17

0

只有事件可以绑定,插件必须用每个新元素调用。

[编辑]

事件不会绑定到新的元素,事件刚好赶上在冒泡/道路上的元素捕获阶段,允许添加新的元素和事件尚可处理。

插件绑定到由init构造函数返回的元素集。插件开发者需要在他们的插件中使用事件委托来捕获被添加到元素范围内的新元素(或者他们可以到文档外并与其他插件发生冲突)。

+0

如果是这样的话,这听起来像是一个插件的好主意。像live-plugin-binding。 很多插件会为jQuery添加一个应该调用来初始化的方法。如果插件可以像在线直播一样处理这个问题,那将是非常棒的。 – 2010-04-06 17:35:14

0

我个人会这样做的方式是让插件初始化一个函数,并在ajax加载完成时调用该函数。我的笔记本电池电量很低,所以我的语法可能有点偏离,但是这个想法就在那里。

function foo() 
{ 
    $('.classSelector').plugin(); 
} 

$('.eventListener').load('url', function() 
{ 
    foo(); 
}) 
相关问题