【问题标题】:Is there an equivalent of the following in prototype?原型中是否有以下等价物?
【发布时间】:2010-03-10 15:34:39
【问题描述】:

特别是关于现场的一点......

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

我想这也可以,虽然我对父函数很好奇:

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

【问题讨论】:

标签: jquery prototypejs equivalent


【解决方案1】:

直播

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

$('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内的spantr内。

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

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

家长

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

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

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

【讨论】:

  • TJ,我相信在 Prototype 中添加 .live 实现有一些讨论。它会被保存到主要版本吗?
  • @Thrope:我认为这是有计划的,是的。我不知道他们的目标是哪个版本,但如果它是 1.7,我不会感到惊讶。你可以在这里问,它会出现在右眼前:groups.google.com/group/prototype-scriptaculous
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-29
  • 2013-06-21
  • 2014-01-09
  • 2012-02-18
  • 2014-05-02
  • 1970-01-01
相关资源
最近更新 更多