2010-08-02 10 views
10

Wie binde ich Ereignisse an HTML-Elemente, die zum Zeitpunkt des Ladens des Skripts nicht vorhanden sind?Binden von Ereignissen an noch nicht erstellte DOM-Elemente (jquery)

Ein Teil meines Skript fügt diese dem DOM:

<a class="btn-remove-item" href="">link</a> 

Das Problem ist, ich kann nicht einfach tun:

$(document).ready(function(){ 

    $(".btn-remove-item").click(function(){ 
     this.parentNode.removeChild(this); 
    }); 
}); 

.. Ich denke, weil das DOM-Element nicht ist dort, wenn die Seite zuerst lädt.

Wie soll ich das Ereignis an myClass binden?

Antwort

22

jQuery.live() ist veraltet. Hier ist die akzeptierte Antwort mit jQuery.on() statt:

$(document).on('click', '#btn-remove-item', function() { 
    this.parentNode.removeChild(this); 
}); 
+0

aktualisiert, um dir die Antwort seit ihrem Update zu geben – babonk

+0

Vielen Dank, danke Dadurch kann ich Ereignisse an meine Angular generierten Elemente binden – Dorian

1

jQuery.live() ist, was Sie brauchen.

$(document).ready(function(){ 

    $("a.myClass").live('click', function() { 
     this.parentNode.removeChild(this); 
    }); 
}); 

Try it out: http://jsfiddle.net/mwR8g/

+1

'live()' ist jetzt veraltet. Verwende 'on()'. Siehe diese Antwort: http://StackOverflow.com/A/8191450/1738090 – w3bshark

3

Das jQuery live() function tut dies:

$("#btn-remove-item").live('click', function() { 
    this.parentNode.removeChild(this); 
}); 
+1

Live ist veraltet, wie kann ich es durch 'on' erreichen? –

+2

können Sie 'on' verwenden, wählen Sie einfach mit 'document' aus und verwenden Sie das selector Argument von 'on', um das richtige Element zu erhalten. z.B. '$ (document) .on ('click', '#someThingCreatedLater', function (event) {... mach was ...});' – tehfoo

-1
$(document).ready(function(){ 
    $(".btn-remove-item").live('click', function() { 
     this.parentNode.removeChild(this); 
    }); 
}); 

Sie brauchen, sind Live zu verwenden.

Verwandte Themen