Kla*_*sen 35 jquery jquery-1.7
我正在尝试对动态添加到页面上的某个容器的元素进行一些条件操作,但我错过了一个事件.
说我有一个容器:
<div id="container"></div>
Run Code Online (Sandbox Code Playgroud)
我可以轻松地将事件处理程序绑定到所有新元素的click函数
$('#container').on('click', '.sub-element', function() { ... });
Run Code Online (Sandbox Code Playgroud)
但是,为了在添加元素时获得"一次性"钩子,我应该绑定什么#container.我试图绑定ready并load无济于事.有没有办法做到这一点,或者我是否必须为我的问题提出另一种解决方案?
Jas*_*per 36
您可以在新添加的DOM元素上触发自定义事件,该事件可以由jQuery事件处理程序获取:
//bind to our custom event for the `.sub-element` elements
$('#container').on('custom-update', '.sub-element', function(){
$(this).html('<b>yaay!</b>');
});
//append a new element to the container,
//then select it, based on the knowledge that it is the last child of the container element,
//and then trigger our custom event on the element
$('#container').append('<div class="sub-element">No worky!</div>').children().last().trigger('custom-update');
Run Code Online (Sandbox Code Playgroud)
这是一个演示:http://jsfiddle.net/ggHh7/4/
即使您通过不同的方法加载动态内容,此方法也允许您全局执行某些操作.
我不确定浏览器是否支持(我假设IE8及更旧版本不支持此功能)但您可以使用DOMNodeInserted突变事件来检测何时添加DOM元素:
$('#container').on('DOMNodeInserted', '.sub-element', function(){
$(this).html('<b>yaay!</b>');
})
$('#container').append('<div class="sub-element">No worky!</div>');
Run Code Online (Sandbox Code Playgroud)
这里是一个演示:http://jsfiddle.net/ggHh7/7/
有一个新的API,因为此时DOMNodeInserted已折旧.我没有调查它,但它被称为MutationOvserver:https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver
阅读完上述答案后,我现在成功使用了这个:
$('body').on({
DOMNodeInserted : function(){
alert('I have been added dynamically');
},
click : function(){
alert('I was clicked');
},
'.dynamicElements'
});
Run Code Online (Sandbox Code Playgroud)
现在我dynamicElements可以利用很棒的.on()事件地图,在他们装载时做些什么.
| 归档时间: |
|
| 查看次数: |
36243 次 |
| 最近记录: |