直播
原型目前没有“实时”支持。不过,您可以对事件委托做类似的事情。您可以在其中观察父元素上的事件,然后在事件处理程序中找出事件实际发生在哪个子元素上:
$('theFormID').observe('click', handleFormClick);
function handleFormClick(event) {
var element;
// Get the element on which the click occurred
element = event.findElement();
}
事件委托仅适用于冒泡事件(如“点击”);我不知道 jQuery 的 live stuff 是否有同样的问题。
一件好事是您可以将 CSS 选择器传递给 Event#findElement:
$('tbodyID').observe('click', handleTableClick);
function handleTableClick(event) {
var element;
// Get the element on which the click occurred
element = event.findElement('tr');
}
...找到被点击的tr,即使实际点击发生在td内的span内tr内。
正确使用事件委托可以显着简化挂钩/取消挂钩元素,尤其是在您动态添加和删除元素时。
如果有一个 Prototype 插件可以“实时”支持,我不会感到惊讶。
家长
您提到要获取单击控件的父级。当您将处理程序与 Prototype 挂钩时,默认情况下它会进行设置,以便在您的处理程序中,this 引用您已设置事件处理程序的元素。例如,如果您有一个div,其 ID 为 foo:
$('foo').observe('click', function(event) {
// Here, `this` will refer to the `foo` element
});
然后您可以使用 Prototype 的 Element#up 来获取父元素。 (如果您正在使用事件委托,并且首先将事件 挂在父级上,当然只需直接使用 this 并且如果您还需要获取对事件的引用点击,如上使用#findElement。)