2010-10-14 5 views
8

Eine jquery Frage.Zuweisen von Click-Ereignis zu div, aber nicht darin verankern

Ich habe ein Div, das Text und ein Anker-Tag enthält.

Ich möchte dem div-Tag und seinem Inhalt ein click -Ereignis zuweisen, mit Ausnahme des Anchor-Tags.

Wenn ich also auf das div klicke, erscheint ein Alarmfenster. Aber wenn ich auf den Anker klicke (das ist innerhalb der div), sollte der Alarm nicht auftreten.

würde das div so etwas wie dieses:

<div id="myDiv"> 
    This is the content of the div. 
    <img src="blah.jpg" /> 
    <a href="somewhere.html">Click here</a>. 
    Some more content. 
</div> 

Irgendwelche Ideen? Ich verwende jquery, um das click -Ereignis dem div zuzuweisen.

Antwort

13

Sie können das Ziel des Klick überprüfen, da die <a> keine Kinder hat, zum Beispiel:

$("#myDiv").click(function(e) { 
    if(e.target.nodeName == 'A') return; 
    //click handler code 
}); 
+0

Ich dachte an den gleichen Code schreiben, aber was ist, wenn er den Anker-Tag –

+1

@Avinash zu einer anderen Seite navigieren möge mit - dies mit, dass –

+0

Dank nicht noch einmal stören würde. – Amra

0

auf die Antwort von Nick Erweiterung, die folgende ist, was ich am Ende mit, da es für verschachtelte Tags Konten.

function handleClick(e) { 
    var $current = $(e.target); 

    // return if we don't want to override another click event 
    // check current tag 
    var tags = ['A', 'BUTTON', 'INPUT']; 
    if (tags.indexOf(e.target.tagName) >= 0) 
     return; 
    // check parent tags 
    var ignoreClick = false; 
    $.each(tags, function(i, tag) { 
     console.log('checking tag', tag); 
     if ($current.parents(tag).length) { 
     ignoreClick = true; 
     return; 
     } 
    }); 
    if (ignoreClick) 
     return; 

    // do your normal click stuff here 
} 

JsFiddle

Verwandte Themen