2012-07-04 12 views
13
Wähler

Ich bin mit .on() Funktion mit dieser Syntax:JQuery verwenden .on() mit nicht

$(".schemaTab").on("click", ".schema", function() {}) 

statt .live() weil ich .schema divs dynamisch bin hinzufügen. Diese divs haben diesen Code:

<div class="schema" id="SCH_16"> 
    <img src="Img/btnRemove.png" class="ikona SCH_Remove" alt="Smazat" title="Smazat"> 
</div> 

Aber ich brauche das img von Click-Ereignis des übergeordneten div auszuschließen, so eine Ahnung, wie es zu tun?

Ich habe versucht:

$(".schemaTab").not(".SCH_Remove").on("click", ".schema", function() {}) 

... aber es hat nicht funktioniert, und ich weiß nicht, wie die .not() innerhalb der dies zu tun zu

Antwort

16

.not() wird nicht funktionieren, weil on Methode Event-Handler auf die aktuell ausgewählte Gruppe von Elementen in dem jQuery-Objekt legt und verwendet die ursprünglichen Wähler zu testen ob die Veranstaltung gelten soll.

Also ich denke, die Auswahl und Filterung in Ihrem Fall wird den Trick tun.

API: http://api.jquery.com/on/

Sie könnte dies versuchen:

$(".schemaTab").on("click", ".schema", function (e) { 

    if (!$(e.target).is(".schemaTab")) { 
     // not stuff in here 
    } 

}); 
+0

'this' wird immer an das Element gebunden, das überprüft wurde; Ich denke du meinst "e.target". – Ryan

+0

@minitech Ah danke und ++ 1 für Ihren Beitrag oben, Prost ':)' –

3

Der springende Punkt .on() Code hinzuzufügen ist Ereignisse auf Elementen behandeln, die noch nicht im DOM enthalten sind, einschließlich Ihrer .sch_Remove.

$(".schemaTab").on("click", ".schema", function() {}) 

Um von der übergeordneten Klick-Aktion zu verhindern, ausgelöst wird, wenn das img geklickt wird, die folgende (zusätzlich zu Ihrer Funktion oben) hinzuzufügen.

$(".schemaTab").on("click", ".SCH_Remove", function() { return false; }) 

Dies wird den Elternteil des ‚Klick‘ Ereignis verhindert Ausbreitung und seine Methode OnClick Triggerung und die Standardklickverhalten verhindern.

+0

Nur damit Sie wissen, da das IMG derzeit das einzige Ding in Ihrem div ist, annullieren diese zwei Zeilen des Codes im Wesentlichen sich gegenseitig. Ich nehme an, Sie werden andere Dinge hinzufügen? Andernfalls müssen Sie möglicherweise Ihren Ansatz überdenken – nbrooks

4

So stellen Sie sicher, dass das Zielspiel:

$('.schemaTab').on('click', '.schema', function(e) { 
    if(!$(e.target).is('.schema')) { 
     return; 
    } 

    // Do stuff 
}); 
3

Ich lief in dieses Problem, und verwendet, um das: nicht selecter, etwa so:

$('.schemaTab').on('click', '.schema:not(.booga)', function(event) { 

// Fun passiert hier });

Ich benutze jQuery 1.11.0, ich weiß nicht, wie weit das funktioniert.

+0

Dies scheint die Frage zu beantworten –