尤其是关于live的部分......
jQuery('.something').live('click', function() {
jQuery(this).parent('form').reset();
});
我想这也可能有效,尽管我对父函数很好奇:
jQuery('.something').live('click', function() {
this.form.reset();
});
尤其是关于live的部分......
jQuery('.something').live('click', function() {
jQuery(this).parent('form').reset();
});
我想这也可能有效,尽管我对父函数很好奇:
jQuery('.something').live('click', function() {
this.form.reset();
});
原型目前没有“实时”支持。不过,您可以对事件委托做类似的事情。这是您在父元素上观察事件的地方,然后在事件处理程序中找出事件实际发生在哪个子元素上:
$('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
被点击的,即使实际点击发生span
在.td
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
按上述方式使用。)