Pobranie id od dynamicznie stworzonego elementu.

Pobranie id od dynamicznie stworzonego elementu.
Z8
  • Rejestracja:około 10 lat
  • Ostatnio:ponad 4 lata
  • Postów:25
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?

LukeJL
  • Rejestracja:około 11 lat
  • Ostatnio:minuta
  • Postów:8423
0

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


edytowany 1x, ostatnio: LukeJL
Z8
  • Rejestracja:około 10 lat
  • Ostatnio:ponad 4 lata
  • Postów:25
0

Niestety, dalej nie wiem jak to zrobic;/

axelbest
  • Rejestracja:ponad 17 lat
  • Ostatnio:dzień
  • Lokalizacja:Warszawa
  • Postów:2251
0

Zrób tak:

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

orkin
  • Rejestracja:prawie 7 lat
  • Ostatnio:około rok
  • Postów:24
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:

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

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

edytowany 4x, ostatnio: orkin
LukeJL
  • Rejestracja:około 11 lat
  • Ostatnio:minuta
  • Postów:8423
0
zduninho88 napisał(a):

Niestety, dalej nie wiem jak to zrobic;/

Kmiń trochę.

Masz:

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

to spróbuj tak:

Kopiuj
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.


edytowany 2x, ostatnio: LukeJL
Z8
  • Rejestracja:około 10 lat
  • Ostatnio:ponad 4 lata
  • Postów:25
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!

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.