2012-01-26 32 views
0

我有一个问题,我需要文档观察点击功能(或类似的东西)从孩子出来的顺序获取元素。原因是我想在子元素上使用e.stopPropagation(),但是父级无论如何都要调用它,因为它是首先被调用的。观察ajax代码的点击顺序检查元素

例如:

<script type="text/javascript"> 
    document.observe('click', function(e, el) { 
     if (el = e.findElement('.parent a')) { 
      e.stopPropagation(); 
     } 
     if (el = e.findElement('.parent')){ 
      alert('parent'); 
     } 
    }); 
    </script> 
    <div class="parent"> 
     <a href="test.html" target="_blank">Child Click Function</a> 
     Parent Click Function 
    </div> 

在这个例子中,父母被首次发现,因此警报被调用。我必须这样做而不是element.observer的原因是它的Ajax生成的内容和Prototype似乎没有像jQuery这样的live()函数。

有没有人有这方面的工作?

谢谢。

回答

0

原型确实有一个.live()等价物,它被称为Event.on()。它也可用作实例方法,Element#on()

document.on('click', '.parent', function(event, element) { 
    if (!event.findElement('.parent a')) { 
     alert('parent'); 
    } 
}); 
+0

谢谢。虽然这在我的例子中有效,但Ajax生成的内容不起作用。尽管如此,你指出了我的解决方案。我用你的条件if(!e.findElement('。parent a')){ – fanfavorite 2012-01-27 14:41:26

+0

我很惊讶,AJAX打破了它,'.on()'是为了解决动态内容的问题而创建的。我很高兴你能找到你的答案。 – clockworkgeek 2012-01-27 15:34:39

0

您正在观察“文档”,事件e的currentTarget是文档。

'.parent a'和'.parent'存在于您的文档中,因此el.findElement('。parent a')和e.findElement('。parent')将始终返回一个元素。

。在您的脚本中找不到第一个.parent,但在输入第一个if时,您不会停止该过程(或使用if/else语句)。所以这个过程继续,脚本在文档中找到.parent元素。

你能解释你想要做什么吗?你为什么要让事件停止冒泡?

btw: 1)el在您的脚本中未定义。 2)你在使用findElement()时在你的脚本中使用“=”而不是“==”;

+0

我正在观察文档点击,这意味着它只在点击时被触发。我明白,两者都是有针对性的,但是想阻止对方。从clockworkgeek的文章中,我意识到我可以在执行.parents功能之前检查是否存在.parent。 1)el不是未定义的,它返回正确的元素。 2)这是故意使用单个“=”,它按预期工作。 – fanfavorite 2012-01-27 14:39:40