Pobranie id od dynamicznie stworzonego elementu.

0

Chce pobrać id z dynamicznie stworzonego elementu. Uzywam do tego kodu JQuery:
$(function () {
$('.element').click(function () {
var item = $(this).attr('id');
console.log(item);

});

});
Niestety kod działa tylko dla elementów stworzonych w html i potrafi pobrać id elementu. Gdy tworze element w JS powyższy kod już nie działa. Jak inaczej pobrać ten atrybut?

0

spróbuj: this.id (bez jQuery).

0

Niestety, dalej nie wiem jak to zrobic;/

0

Zrób tak:

$('.element').on('click', function () {
//Tu Twój kod
});

1

W przypadku dynamicznie tworzonych elementów - handler, który został założony przed ich utworzeniem, nie będzie w stanie wykryć kliknięcia.
Dla przykładu:
https://jsfiddle.net/Lsyrftvm/
Button1, który jest statycznie w HTMLu, zostanie złapany przez handler i alert zostanie wyświetlony. Natomiast kliknięcie w Button2 nie zostanie wykryte, ponieważ element docelowy jest tworzony po 50 milisekundach czyli dopiero po wykonaniu $('button').on('click', ...)

Aby temu zaradzić musisz założyć event listener na najbliższego statycznego rodzica, co do którego masz pewność, że zawsze będzie w drzewie DOM.
Dla przykładu:
https://jsfiddle.net/8vjcnb0p/
Tutaj utworzyłem handler na '#container', który zawsze istnieje w drzewie DOM i w którym znajdują się wszystkie buttony. Następnie w metodzie .on(), zgodnie z dokumentacją, trzeba dodać parametr wskazujący elementy, na które chcemy założyć event listener:

.on('click', 'button', function () {})

http://api.jquery.com/on/

0
zduninho88 napisał(a):

Niestety, dalej nie wiem jak to zrobic;/

Kmiń trochę.

Masz:

var item = $(this).attr('id');

to spróbuj tak:

var item = this.id;

W ten sposób zamiast ciągnąć atrybut id dostajesz się do właściwości id. I to powinno działać, przynajmniej jeśli chodzi o samo pobieranie id (podpinanie zdarzeń to już inna bajka).

Edit: chociaż sprawdziłem na jsfiddle i w elementach pojawia się atrybut id nawet jeśli tworzysz je dynamicznie http://jsfiddle.net/fx4s9eto/

Chociaż pewnie przedmówca ma rację z tymi zdarzeniami, ja się skupiłem bardziej na tytule wątku, ale możliwe, że pytanie zostało źle zadane.

1

Połączyłem dwie ostatnie odpowiedzi i działa!
$('#lista').on('click', 'div', function(){
console.log(this.id);
})
Dzięki temu klikając w każdy nowo tworzony element mogę pobrać jego id.
Muszę to pokmińic bo raczej dalej się bez takich rzeczy nie obejdzie.
Dziękuję serdecznie!

1 użytkowników online, w tym zalogowanych: 0, gości: 1