2011-10-24 11 views
2

私はajax経由でロードされたリンクにイベントを追加しています。ここでは、HTMLの簡単な例です:EventDelegation(:relay)を使用すると、mootoolsはイベントのバブリングを停止します

<div class="ajax-content"> 
    <div class="parent"> 
    <a href="#" class="event-link">Click here</a> 
    </div> 
</div> 

「アヤックス・コンテンツ」内のすべてのコンテンツは、AJAXを介してロードされます。私は ".event-link"のクリックイベントを ".parent"にバブルアップさせたくありません。それは、AJAXを介してロードされていなかった場合、私はこれを行うことができます:

$$('.event-link').addEvent('click', function(event){ 
    event.stopPropagation(); 
    event.preventDefault(); 
    //do stuff 
}); 

しかし、私は同じ動作を実現する方法を見つけ出すことはできません(クリック:リレー)。これは私が試しているものです:

$$('.ajax-content').addEvent('click:relay(.event-link)', function(event){ 
    event.stopPropagation(); 
    event.preventDefault(); 
    //do stuff 
}); 

クリックイベントが「.parent」で発生しないようにするにはどうすればよいですか? (私も他の構文を試してみました - event.stop()およびfalseを返すが、彼らは同じ結果が得られた。)

答えて

2

私は、委任されたクリックイベントがdiv.parentで発生しないようにしようとしていました。これはdiv.parentイベントにイベントターゲットのチェックを追加することによって、私の特定の状況で達成することができます。正しい方向に私を指しているためディミタールへ

$$('.ajax-content').addEvent('click:relay(.event-link)', function(event){ 
    console.log("hi"); 
    event.preventDefault(); 
    //do stuff 
}); 

$$('.ajax-content').addEvent('click:relay(.parent)', function(event) { 
    if (event.target.match('a')) return false; 
    console.log("parent"); 
}); 

ありがとう!

5

ダウンDOMツリーの最上部からイベント伝播のごDOMの順序と順序を考慮してください。

<div class="ajax-content"> 
    <div class="parent"> 
    <a href="#" class="event-link">Click here</a> 
    </div> 
</div> 

イベントをdiv.ajax-content(委任者)に添付します。つまり、ヒットするまでには、a.event-link、次にdiv.parent、最後にdiv.ajax-contentにバブリングする必要があります。それを止めるにはポイントがありません、div.parentはとにかく最初に来る:

http://jsfiddle.net/dimitar/ChrCq/1/

http://jsfiddle.net/dimitar/ChrCq/

はここにあなたが.parentからイベントを停止したとき、それは委任者に到達する前に何が起こるかです

代表団は、W/Oそれは欠点だされていない、私は怖いです:)

あなたも、この最近の質問/委任されたイベントのいくつかのより多くの注意点に入った答えとどのように読むことをお勧めします彼らは正常な事象、代行者を交代させることによって困難を回避する方法とは異なります。 Make (possibly dynamically loaded) element clickable via JavaScript, but give precedence to links contained within - 私はまだmootoolsのイベントの委任が多少変更されることを期待していますが、あなたのケースでどのように役立つのか分かりません。

+0

徹底的な返信をありがとう! .live()を使用してこれを行うことができるjQueryからこれを移植する際にこの問題が発生しました。あなたが概説したように根本的な違いがあることを恐れました。 –

+0

はい、この基本的な違いは先週IRCに寄せられました。奇妙なことに、mootoolsオフィスの時間(mreenools.net)でmootoolsのすべての開発者が質問に答えて助けてくれます。異なる動作を示すmootools verとjquery verを使ったテストケース。私はそれがうまくいくとは思えませんが、おそらくできる巧妙なフレームワークのpplがあります:) –

+0

@DimitarChristoffをクリアしていただきありがとうございます –

関連する問題