2016-06-10 11 views
1

Angenommen, wir haben diese:jQuery Steuerung der Reihenfolge der Click-Ereignisse

$(document.body).on("click", "div", function() { 
    console.log(1); 
}); 

$("div").on("click", function() { 
    console.log(2); 
}); 

Wenn ich jetzt auf der <div> klicken, wird der Ausgang ist:

2 
1 

Gibt es eine Möglichkeit das Gegenteil zu haben, um , angesichts der Tatsache, dass Ich kann die Selektoren nicht ändern oder die Reihenfolge ändern?

EDIT

Meine aktuelle Problemumgehung ist ein setTimeout(), aber ich würde es vorziehen, dies nicht zu haben, da es hässlich Pannen schafft.

+0

Tauschen Sie einfach die console.log() der beiden Ereignisse;) –

+0

Ich denke, dass der zweite immer zuerst feuern wird, da es an ein 'div' gebunden ist. Das bedeutet, dass der Benutzer auf das "div" klickt, dann platzt das Ereignis auf und trifft das erste Ereignis, das an den Körper gebunden ist. –

Antwort

0

Sie sagten nichts über Callback-Funktion Modifizieren

$(document.body).on("click", "div", function() { 
    setTimeOut(function(){ console.log(1);},5}); 
}); 

$("div").on("click", function() { 
    console.log(2); 
}); 
+0

Ja, das ist, was ich jetzt habe, aber es schafft hässliche Störungen ... – kraftwer1

1

Die Veranstaltung propagiert bis Trog DOM, so gibt es keinen praktischen Weg, klicken Sie einfach auf den Körper zu zwingen, der Klick auf div abzufeuern, bevor der Fall ist. Allerdings würde eine einfache Abhilfe für dieses Problem folgenden:

var somethingOrOther = function() { 
    console.log(1); 
} 

$(document.body).on("click", "div", function() { 
    somethingOrOther(); 
}); 

$("div").on("click", function(event) { 
    event.stopPropagation(); 
    somethingOrOther(); 
    console.log(2); 
}); 

event.stopPropagation(); sorgt dafür, dass der Klick nicht Blase weiter das DOM und auf Körper klicken, wird nicht ausgelöst, aber nur, wenn Sie auf die div.

Verwandte Themen