2012-05-19 2 views
5

aufgerufen wird. Ich möchte nach jeder Schaltfläche "Gefällt mir" ein Element hinzufügen (Chrome-Erweiterung). Da Beiträge zum Nachrichtenfeed hinzugefügt werden, ohne die Seite zu aktualisieren, muss ich einen Ereignis-Listener "DOMNodeInserted" hinzufügen. Aber wenn ich versuche, die after() Funktion darin zu setzen, funktioniert es nicht.Fügen Sie ein Element hinzu, wenn das Ereignis "DOMNodeInserted" mit dem Namen

Code:

$("#contentArea").addEventListener("DOMNodeInserted", function(event) { 
     $(".like_link").after('<span class="dot"> · </span><button class="taheles_link stat_elem as_link" title="תגיד תכל&acute;ס" type="submit" name="taheles" onclick="apply_taheles()" data-ft="{&quot;tn&quot;:&quot;&gt;&quot;,&quot;type&quot;:22}"><span class="taheles_default_message">תכל&acute;ס</span><span class="taheles_saving_message">לא תכלס</span></button>'); 
     $(".taheles_saving_message").hide(); 
    }); 

Wenn ich ändern $("#contentArea")-document es die ganze Seite abstürzt.

Antwort

7

, wenn Sie einen Ereignis-Listener in jQuery hinzufügen möchten, das ist nicht das Verfahren, sollte die corect Weise immer sein:

$(document or window).bind(your_event_name, function(event) { your_callback }); 

mit diesem im Verstand, können Sie schreiben:

$(document).bind('DOMNodeInserted', function(event) { 

    alert('inserted ' + event.target.nodeName + // new node 
      ' in ' + event.relatedNode.nodeName); // parent 

}); 

oder tun, was Sie jedes Mal tun müssen, wenn ein Knoten in das DOM eingefügt wird.


zu Ihrer Information, wenn Sie addEventListener verwenden möchten, müssen Sie JavaScript Ebene und nicht jQuery verwenden.

document.addEventListener("DOMNodeInserted", function() { 
    // your code 
}, false); 

Edit: Wie auf jQuery 1.7, benutzen Sie bitte die '.auf' Funktion statt: http://api.jquery.com/on/


ein weiterer Fehler, der sich aus Ihrer Methode kommt (wenn es funktioniert), dass Sie wird wie Sie einfügen eines Knotens und rufen Sie sind brechen Ihre Anwendung die DOMNodeInserted (Ursache Sie einen Knoten eingefügt haben), und das wird den Knoten wieder ein, und rufen Sie die DOMNodeInserted wieder ...

Sie können sehen, was los ist ...

Ich würde vorschlagen, dass Sie die richtige Methode hören und fügen Sie Ihre span dort ...

+0

Wenn ich die zweite Methode verwenden, welche Funktion sollte ich statt nach() in jQuery? –

+0

Sie können keinen Knoten in Ihrem Listener für 'DOMNodeInserted' einfügen oder Sie erhalten eine Endlosschleife ... Nachdem Sie' .after() 'zum Einfügen des neuen Knotens verwendet haben, wird der' DOMNodeInserted' erneut aufgerufen (wie Sie haben einen DOM-Knoten eingefügt) und so weiter und weiter und weiter ... – balexandre

+0

ja Sie haben Recht, haben Sie einen Vorschlag? Ich habe schon viele Dinge wie setInterval() ... –

0

wenn Sie Problem, dass Ihr Code unter Läufe mit Blick auf einmal in jquery .on() Funktion dann sollte Ihr es unter addEventListner setzen wie unten Beispiel //

document.addEventListener('DOMNodeInserted', function(e) { 
    $("selector").on('DOMNodeInserted', function(e) { 
     //your code which you want to execute each time DOMNodeInserted 
    }); 
}); 
Verwandte Themen