2012-01-26 30 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