2014-03-05 6 views
5

ich eine Syntax wieWie gefunden, wenn ein Ereignis bereits gebunden mit jQuery

$("body").on("click", ".className", function(){ 
    // some code 
}); 

es funktioniert gut mit, dann habe ich die ganze Seite mit Ajax (kein Browser refresh) neu geladen, dann begann die Veranstaltung Brennen zweimal, ein anderer refresh - gefeuert dreimal und so weiter.

dann umgewandelt ich den Code zu

$("body").off("click", ".className").on("click", ".className", function(){ 
    // some code 
}); 

es um das Problem zu einem gewissen Grad festgelegt ist. Selbst danach werde ich in einigen Szenarien mehrfach feuern. Gibt es eine Möglichkeit, um herauszufinden, ob es existieren ‚auf‘ Ereignisse mehr als einmal auf das Element gebunden ist, entfernen sie alle und binden Sie es nur für eine Zeit?

Nicht sicher, ob dies eine gültige Frage ist, oder ich konnte es eindeutig erklären.

+0

Rufen Sie diese Funktion jedes Mal auf, wenn Sie die Seite mit Ajax laden? – Anton

+0

ein 'init' Variable auf true nach den ersten Bindungen Set und diese Variable überprüfen, bevor sie wieder zu binden. – levi

+0

Sie sollten besser Ihren Bindungscode nicht innerhalb eines Handlers/Callbacks einbinden. –

Antwort

2

Wenn Sie jedes Mal delegieren Sie die Seite mit Ajax laden sie binden immer wieder auf den Körper der Kinder .className verursacht somit den unerwünschten Effekt

$(function() { 
    $("body").on("click", ".className", function() { 
     // some code 
    }); 

    function loadpage() { 
     //ajax call 
    } 
    loadpage(); 
}); 

Versuchen Sie, Ihre Veranstaltung Delegation außerhalb loadpage Funktion setzen

+0

Eigentlich mache ich den Anruf innerhalb des Klickcallback-Funktion und Rendern der Seite. –

+1

@Souviiik also warum sind verbindlich Sie es innerhalb Click-Handler ??? –

+0

Was schlägst du vor? Code ist wie $ ("body"). Off ("click", ".className"). On ("klick", ".className", function() { $ .ajax(). Done (function (Daten) {// render-Seite mit Daten}); }); –

Verwandte Themen