2012-03-06 16 views
0

私はコンテナを持っていますが、子要素はありません。私はコンテナ(#container)にクリックイベントを追加するだけです。私はこの機能を使用するために、stopPropagationは絶対配置された要素では機能しません

$(document).delegate("#container", 'click', function(e){ 
e.stopPropagation(); 
alert(this.tagName); // it show the "div", but i clicked on "a" 
}) 

それはうまく動作します。しかし、私は絶対的にイメージと、 'a'要素を配置していませんが、イメージまたはaをクリックすると、コンテナdivのように動作します...どうすればこの問題を回避できますか?どんな助け?

+0

問題を再現する[jsFiddle](http://jsfiddle.net/)を表示できますか? – Ryan

+0

これは私のipadのアプリで起こっている..私はそれが非常にjsFidleに置くことは奇妙だと思う、これを修正する方法はありますか? – 3gwebtrain

+1

あなたはイベントをドキュメントにバインドしています。つまり、イベントが発生するまでにイベントが既にバブリングされています。つまり、何らかの方法で伝播を止めることはできません*伝播)。 '#container'要素に近い要素にバインドし、*その点で伝播を止めてみてください。 –

答えて

0

thisは、イベントが「バインドされている」ため、常に#containerになります。

thisの代わりにe.targetを使用してください。 e.targetは常にイベントがトリガーされた要素になり、thisはその要素にバインドされます。

DEMO:http://jsfiddle.net/usmjr/2/

P.S. stopPropagation.delegateで動作しません。delegateはイベントを伝播して機能するため、伝播を停止できません。委任されたイベントへの伝播を停止する他のイベントを持たせることはできますが、委任されたイベントにヒットした後は伝播を停止することはできません。 http://api.jquery.com/delegate/#notes-0

関連する問題