2016-09-08 2 views
0

Hier ist, wie es soll = arbeiten>Normal behaviorMouseEnter- Ereignis tritt mehrmals, auch wenn ich versuche, es zu verhindern

1) Das Ereignis (MouseEnter-) sollte nicht nach der neuesten likers Box Feuer erstellt und ist noch offen. 2) Ich habe ein Ereignis (mouseleave) auf der letzten Likers-Box (NICHT auf den Likes selbst).

ABER wenn ich schwebe (Mouseenter das erste Mal) wirklich schnell das Ereignis auftritt oft und jedes Mal erstellt die neueste Likers Box (es sollte nicht passieren). => Actual problem

$('.statuses_mbody').on('mouseenter', 
'.status_likes, .reply_likes',function (e) { 
    //capture the main data(not displayed for simplicity). 
    //send ajax request. 
    //here is code that checks the state of the box(closed,opened) 
    //get data back from server and display them. 
}); 

Ich habe gesehen und versucht, viele Teile des Codes über das Internet, aber immer noch kann ich nicht eine Lösung auf diese finden.

+0

Wenn Sie den Mauszeiger an dieser Stelle schnell bewegen, kann der Zeiger aus der div gehen und dann wieder in die div und somit ist es mehrere Male Feuer. Sie können eine Markierung hinzufügen, wenn Sie den Ajax-Anruf ausführen. Also, bis Sie Ajax Erfolg haben, wird jede andere Maus den Ajax nicht aufrufen. – Indra

+0

Ich lade noch einmal das erste gif hoch und ich habe ein paar Dinge erklärt. –

+0

eine Methode wirklich nicht hilft, obwohl es die wiederholten Ereignisse am Anfang stoppt, aber dann kann das Ereignis nicht erneut ausgelöst werden :( –

Antwort

1

Sie müssen es sehen lassen prüfen, ob das Ereignis bereits im Gange ist, würde ich es wahrscheinlich wie folgt aus:

$('.statuses_mbody').each(function() { 
    $(this).one('mouseenter', '.status_likes, .reply_likes',function (e) { 
    if ($(this).data('in-progress')) { return } 
    $(this).data('in-progress', true) 
    $.ajax(/* whatever */) 
     .done(function() { /*whatever*/ }) 
     .always(function() { 
      $(this).data('in-progress', false); 
     }); 
}); 
1

Die mouseenter Ereignis jedes Mal, wenn Sie die Elemente dieses Ereignis verknüpft geben abfeuern ! Hier ist die Beschreibung des Ereignisses:

Bind eine Ereignisbehandlungsroutine abgefeuert werden, wenn die Maus ein Element tritt oder Auslöser, der auf einem Element-Handler.

Vielleicht möchten Sie one() Ereignis?

Verwandte Themen