我需要将事件监听器绑定到所有通过给定CSS选择器动态创建的元素上。
在jQuery中,可以这样实现:
在jQuery中,可以这样实现:
$(".foo").live("click", function(e) {
// bar
});
在 Prototype 中是否有与此相当的方法?
$(".foo").live("click", function(e) {
// bar
});
在 Prototype 中是否有与此相当的方法?
通常使用Event#findElement
来完成此操作:
document.observe('click', function(e, el) {
if (el = e.findElement('.foo')) {
// there's your `el`
// might want to stop event at this point - e.stop()
}
});
这个问题的正确答案在这里:http://gurde.com/2011/08/jquery-live-in-prototype/
在Prototype中,等价于jQuery的.live()
方法是使用Event.on()方法:
var handler = document.on(
'click',
'div[id^="post-"] .attached-post-thumbnail',
function(event, element) {
console.log(this);
console.log(element);
}.bind(this)
);
handler.stop();
handler.start();
在回调函数中,this
关键字将始终引用原始元素(在本例中为文档)。
document.on(...)
,相反你需要以同样的方式使用 Event.on(document, ...)
。 - clockworkgeekdocument.on
没有列出来,在控制台中检查时返回undefined
。原来Prototype 1.7的网站正在运行Prototype 1.6!我不得不检查源代码才找到它被定义了。 - clockworkgeek
live
被引入以来,jQuery在实时绑定方面的工作原理。jQuery可以将处理程序绑定到document
上,用于不会自然传播的事件,因为jQuery会手动创建和传播此类事件。 - jangosteveel
需要被赋值,而不是被比较 :) - kangaxe.findElement('...')
搜索您单击的元素的祖先树,直到找到满足查询条件的元素。结果被分配给一个元素。如果没有分配任何内容(=从未找到元素),则不会进入条件块。 - kangax