Rolf B: onclick auf dynamisch hinzugefügte ID

Beitrag lesen

Hallo Pit,

du machst das bitte im konkreten Fall NICHT so. Statt eines span füge einen Button hinzu, mit type="submit".

Wenn #myVan bereits im #formDel Form drin liegt, reicht das schon. Andernfalls musst Du dem Button mit dem form='formDel' Attribut noch sagen, welches Form er submitten soll.

Auf einen Klick-Handler für den Button kannst Du dann verzichten, und wenn Du das Design eines Button nicht willst, dann style den Button so, wie Du das span gestyled hast.

Und - wenn Du keinen bestimmten Grund für deine Schreibweise hast, der aus dem geposteten Code nicht ersichtlich ist - dann kannst Du statt '#myVan' + ' .mybutton' auch kurz '#myVan .mybutton' schreiben.


Andererseits ist das Problem, das Du hier hattest, natürlich durchaus häufig. Die ansynchrone Natur von JavaScript hat schon viele in den Wahnsinn getrieben.

Möglichkeit 1: der html() Setter liefert Dir ein Wrapped Set auf den hinzugefügten Span (glaub ich jedenfalls) und damit solltest Du problemlos ein .on('click', ...); hinten anhängen können.

Der Code ist rot, damit jeder, der ihn ggf. kopieren will, sofort sieht dass das für das gewählte Szenario nicht best-practice ist.

$('#myDel').on('click', function() {
      $('#myVan' + ' .myButton')
         .html("<span id='TDel'>Wirklich löschen?<span>")
         .on("click", function() {
            console.log(this.id);
            $("#formDel").submit();
         });
});

Die andere Möglichkeit ist, einfach auf $('myVan') einen Klick-Handler zu legen und ihn dort zu lassen. Die .on() Methode kennt eine Variante mit 3 Parametern, in der der 2. Parameter als Filter dient. Damit kannst Du den Klick-Handler an passender Stelle im DOM verankern, aber nur die Klicks auf die Elemente verarbeiten, die auf deinen Selektor passen.

$('#myDel').on('click', function() {
      $('#myVan .myButton')
         .html("<span id='TDel'>Wirklich löschen?<span>")
});
$('#myVan .myButton').on('click', '#TDel', function() {
   $("#formDel").submit();
});

Rolf

--
sumpsi - posui - clusi