在Ext JS中,如何将事件附加到动态html元素?
假设我有一些Ext JS代码将一个事件处理程序附加到类“myclass”的所有元素上。 例如:
Ext.onReady(function(){
Ext.select('a[class*=myclass]').on('click', function(event, elm){
// do something
});
});
我的html可能如下所示:
<a class="myclass" href="#">test1</a>
<a class="myclass" href="#">test2</a>
<a class="myclass" href="#">test3</a>
这没有问题。 但是,请考虑是否将“myclass”元素在未来某个时间写入页面。
例如:
<a id="anchor1" href="#">create link dynamically</a>
<script type="text/javascript">
Ext.onReady(function(){
Ext.select('a[id*=anchor1]').on('click', function(event, elm){
Ext.get('panel').update('<a class="myclass" href="#">test4</a>');
});
});
在这种情况下,当用户点击#anchor1时会创建“test4”链接。
“test4”链接没有与它关联的click()处理程序,即使它具有class =“myclass”。
任何想法如何我可以解决这个问题?
基本上,我想编写click()处理程序一次,并将其应用于页面加载时的内容和稍后通过Ajax / DHTML引入的内容。
尝试委托下面的活动 -
Ext.getBody().on('click', function(event, target){
var element = Ext.get(target);
//perform your action here
}, null, {
delegate: '.myclass a'
});
不要在这种情况下听取个别物品,而是倾听他们的容器。 然后项目可以自由地添加到容器中或从容器中移除,并且您的逻辑将仍然有效。
我也有一个技巧的例子。 当心,这个例子是为Ext以前的版本编写的,所以你可能不能复制和粘贴它的代码,并期望它能在今天工作。 尽管如此,这个原则仍然适用,现在可以使用。
链接到源代码:http://examples.extjs.eu/itemclick.js
链接地址: http://www.djcxy.com/p/51459.html上一篇: In Ext JS, how to attach events to dynamic html elements?
下一篇: Implementing jQuery's "live" binder with native Javascript