原型中是否有以下等价物?

时间:2010-03-10 15:34:39

标签: jquery prototypejs equivalent

特别关于生活......

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

我认为这可能也有效,尽管我对父函数感到好奇:

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

1 个答案:

答案 0 :(得分:3)

原型目前没有“实时”支持。但是,您可以使用事件委派执行类似的操作。这是你在父元素上观察事件的地方,然后在事件处理程序中找出事件实际发生在哪个子元素上:

$('theFormID').observe('click', handleFormClick);
function handleFormClick(event) {
    var element;

    // Get the element on which the click occurred
    element = event.findElement();
}

事件委托仅适用于冒泡的事件(如“点击”);我不知道jQuery的实时内容是否有同样的问题。

一个好处是你可以将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,即使实际点击发生在spantd内的tr内。

正确使用事件委托可以大大简化挂钩/取消挂钩元素,特别是当您动态添加和删除元素时。

如果Prototype的插件能够提供“实时”支持,我不会感到惊讶。

您提到要获取所点击控件的父级。当您使用Prototype连接处理程序时,默认情况下会进行设置,以便在处理程序中this引用您设置事件处理程序的元素。例如,如果您的div标识为foo

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

然后,您可以使用Prototype的Element#up来获取父元素。 (如果您正在使用事件委派,并且首先将事件挂钩在父上,当然只需直接使用this,如果您还需要获取对该事物的引用点击后,使用上面的#findElement。)