1

尤其是关于live的部分......

 jQuery('.something').live('click', function() {
     jQuery(this).parent('form').reset();
 });

我想这也可能有效,尽管我对父函数很好奇:

 jQuery('.something').live('click', function() {
     this.form.reset();
 });
4

1 回答 1

3

居住

原型目前没有“实时”支持。不过,您可以对事件委托做类似的事情。这是您在父元素上观察事件的地方,然后在事件处理程序中找出事件实际发生在哪个子元素上:

$('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在.tdtr

正确使用事件委托可以显着简化挂钩/取消挂钩元素,尤其是在您动态添加和删除元素时。

如果有一个“实时”支持的 Prototype 插件,我不会感到惊讶。

家长

您提到要获取单击控件的父级。当您将处理程序与 Prototype 挂钩时,默认情况下它会进行设置,以便在您的处理程序中this引用您设置事件处理程序的元素。因此,例如,如果您有divid foo

$('foo').observe('click', function(event) {
    // Here, `this` will refer to the `foo` element
});

然后,您可以使用 Prototype 的Element#up来获取父元素。(如果您正在使用事件委托并且首先将事件挂钩到级,当然只需this直接使用,如果您还需要获取对被单击的事物的引用,请#findElement按上述方式使用。)

于 2010-03-10T15:41:01.263 回答