我正在使用Jquery动态地将一些HTML添加到页面中。
现在这个新的HTML代码应该触发额外的Jquery函数,以便能够完成更多的处理,但是这个新的HTML代码无法识别,因此不会触发额外的Jquery函数。
如何识别新的HTMl代码并触发其他功能?
感谢名单
答案 0 :(得分:1)
这取决于你想做什么。首先要研究的是jQuery的.live()方法。您可以将事件关联到将来存在或将存在的匹配元素。例如,此click方法仅绑定到具有“clickme”类的现有元素
$('.clickme').bind('click', function() {
// Bound handler called.
});
但是,如果使用.live()方法绑定它,那么它将适用于现有元素和创建的任何新元素:
$('.clickme').live('click', function() {
// Live handler called.
});
这些示例直接在live方法的API页面上显示。请在此处查看:http://api.jquery.com/live/
答案 1 :(得分:0)
更多细节可能会有所帮助,但听起来像Jquery.live()可能就是您所需要的。 Jquery.live()动态地将处理程序绑定到元素。
答案 2 :(得分:0)
通常有2个问题,事件处理程序和插件,这是两个不同的事情。
第1部分:事件处理程序
事件处理程序很简单,因为它们对事件起作用,无论何时添加元素,事件的行为都相同。为此,.live()
和.delegate()
,.live()
侦听document
上的事件,并在事件来自与选择器匹配的元素时运行,让我们以表格行为例:
$("tr").click(function() { ... });
这会找到所有当前表行,当它运行并将click
事件处理程序绑定到它们时,与.bind('click', function)
相同。然后有.live()
,就像这样:
$("tr").live('click', function() { ... });
这会监听click
事件to bubble up到document
(默认情况下会自动发生)并执行处理程序...当前和未来的元素在这里的行为方式相同。这意味着它适用于两者。然后是.delegate()
,这是.live()
的本地版本,如下所示:
$("#myTable").delegate('tr', 'click', function() { ... });
如果你只是向#myTable
添加行而不是删除/添加表本身,那么用于冒泡事件的相同类型的监听器可以放在那里,而不是一直放在document
上,这意味着事件必须在到达您想要执行的处理程序之前冒泡更少次。
第2部分:插件
插件有点棘手,因为它们采用元素并用它们做事(对于大多数插件来说都是如此)。你有两个不错的选择,要么在你自己的新元素运行插件时,例如通过$.ajax()
或shorthand version加载看起来像这样:
$.ajax({
//options...
success: function(data) {
//add elements
$("tr", data).myPlugin();
}
});
这会找到新的<tr>
元素,但只能在本地context中(在返回的HTML中),并且只对这些元素执行。或者,有一个插件,效率较低,但在大多数页面上通常没有明显的差异。 The .livequery()
plugin主动查找并执行新元素,相同的代码如下所示:
$("tr").livequery(function() {
$(this).myPlugin();
});
这些都是有效的解决方案,只需看看哪个更适合您的需求。