使用预先连接的事件向DOM动态添加超链接
Dynamically add hyperlinks to DOM with pre-wired events?
我有一个表,其中一列包含一个超链接。在页面加载时,已经填充了许多行,我正在数组中枚举,并连接每个超链接上的点击事件:
$$("a[id^=remove]").each(function (item) {
item.observe("click", removeDevice);
});
这部分工作;单击超链接将运行removeDevice
方法,其中包括一个Event.stop
调用,以防止超链接导航离开。
稍后,我将新行添加到此表中,并且需要具有相同工作的新超链接。我正在使用Prototype动态创建这些,如下所示:
var remove = new Element("a", { id: "remove-{SerialNumber}".interpolate(device), href: "/Home/Javascript" })
.update("Remove")
.observe("click", removeDevice);
然而,我现在纠结于如何将这个元素放入我的表中,并且仍然将事件连接起来。我可以通过以下操作显示超链接:
newRow.insert({ bottom: new Element("td").update(remove.outerHTML) });
但是,正如你可能怀疑的那样,这些事件在这里已经不起作用了。有没有一种方法可以直接添加元素,保留我连接的事件?
我过去也做过同样的事情,必须弄清楚如何使用事件传播来观察父级的事件,这样所有元素(动态或其他)都会触发我的处理程序
使用数据行的示例
<table id="clickablerows">
<tr><td><a href="javascript:void(0);" class="clickme">Click Me</a></td></tr>
<tr><td><a href="javascript:void(0);" class="clickme">Click Me</a></td></tr>
<tr><td><a href="javascript:void(0);">Don't Click Me</a></td></tr>
</table>
您可以观察表元素,但要注意从链接弹出的事件
$('clickablerows').on('click','.clickme',function(e,target){
// e is the Event object
// `this` is the <table> element
// target is the element that matches the CSS selector (2nd parameter)
});
通过这种方式连接,您只有一个观察者,而不是来自$$().each()
的许多观察者,无论表中添加了什么元素,如果它们与CSS选择器匹配,它都会触发处理程序。有时我会很懒,做document.on('click','.clickme',function(e,target){})
,它监视根文档对象的点击
注意:有些事件不会像焦点或模糊一样冒泡,请检查MDN,看看您要使用的事件是否会冒泡到父元素
相关文章:
- 向动态生成的DOM添加Angular自定义指令
- angularjs-bindng-click从jquery动态加载DOM
- casper.waitForSelector无法处理动态DOM操作
- 如何从动态属性将IMG插入DOM
- 动态创建的DOM元素上的jQuery事件绑定
- 如何停止/播放在DOM中动态添加的视频
- 动态 DOM 砌体 jQuery 插件
- 如何使用jquery动态更改DOM元素CSS类
- chrome扩展在加载dom之前注入动态css
- 删除在加载dom之后创建的动态元素
- 使用预先连接的事件向DOM动态添加超链接
- 为什么可以't我通过ID访问这个动态加载的DOM元素(没有iframe)
- 为什么不;当我使用HTML dom动态添加SMIL动画时,SMIL动画就可以工作了
- 用DOM动态创建表
- 向DOM动态添加SVG
- ReactJS DOM动态参考
- 当DOM动态变化时,如何处理带有' data-* '属性的JavaScript事件
- 如何让Aurelia在向DOM动态添加自定义元素后呈现我的视图
- 在Internet Explorer中使用html dom动态表
- 使用 JQuery 为 DOM 动态添加每个输入标签