e.target Attributes Problem

02/08/2020 21:16 Cc_Cc_Cc#1
Guten Tag,

ich habe viele Beiträge und unter jedem Beitrag kann man kommentieren oder ein Bild posten. Wenn ich jetzt ein Bild posten möchte klicke ich auf das Foto-Symbol (In Html:


Jedes Foto-Symbol hat ein Attribute namens: Data-Attr-Id. Dort wird die Beitrag ID gespeichert. Ich möchte jetzt beim betätigen des Foto-Symbols die Beitrag ID des Foto-Symbols bekommen.

Wenn ich jetzt auf den ersten Beitrag draufklicke, zeigt er mir es an wunderbar. Aber wenn ich jetzt nach unten scrolle zeigt er mir die Beitrag ID Des ersten Beitrages an. Egal welches Symbole ich klicke , es wird immer die gleiche Beitrag ID angezeigt obwohl jedes Data-Attribute eine andere Beitrag ID hat.

JS:


Weiß jemand woran es liegt?
02/09/2020 01:28 False#2
Bitte stell mal ein laufendes Beispiel zur verfügung, das erleichtertet das helfen deutlich ! (Dafür kannst du z.b. jsfiddle nutzen).

Wenn du eh schon Jquery nutzt, kannst du übrings
Code:
var id = $(e.target).data("attr-id');
statt
Code:
var id = e.target.getAttribute('data-attr-id');
nutzen
02/09/2020 02:26 elmarcia#3
I think the problem is because he's loading dynamic content when scrolling down, but new content won't work with already registered listeners, so in order to make them work u should add a listener to your new elements, the fast way to do it is remove current class listener and register it again after adding the new content
02/09/2020 12:02 False#4
Quote:
Originally Posted by elmarcia View Post
I think the problem is because he's loading dynamic content when scrolling down, but new content won't work with already registered listeners, so in order to make them work u should add a listener to your new elements, the fast way to do it is remove current class listener and register it again after adding the new content
I dont think this is the problem. If that would the problem he would get no id, instead of the same id.
Also he wouldnt need to remove the listener and add it again, he could use
Code:
$('body').on('eventName', 'targetSelector', function)
instead of
Code:
$('targetSelector').on('eventName', function)
02/10/2020 09:02 lnqlorlouz#5
Liegt es nicht daran, dass immer das erste gefundene Element den Eventlistener bekommt?
Also müsstest du nicht so etwas in der Art machen:
Code:
   var inputs = document.querySelectorAll(".inputfile2comment");
   inputs.forEach(input => {
     input.addEventListener("change", e => 
        console.log(e.target.getAttribute("data-attr-id");
   });
02/10/2020 20:05 False#6
Quote:
Originally Posted by lnqlorlouz View Post
Liegt es nicht daran, dass immer das erste gefundene Element den Eventlistener bekommt?
Also müsstest du nicht so etwas in der Art machen:
Code:
   var inputs = document.querySelectorAll(".inputfile2comment");
   inputs.forEach(input => {
     input.addEventListener("change", e => 
        console.log(e.target.getAttribute("data-attr-id");
   });
Nein, wenn wenn es mehrere Elemente für den Selector gibt, dann bekommen alle das Event.
(Sofern man Jquery nutzt => Was er tut)
02/12/2020 17:25 lnqlorlouz#7
Quote:
Originally Posted by False View Post
Nein, wenn wenn es mehrere Elemente für den Selector gibt, dann bekommen alle das Event.
(Sofern man Jquery nutzt => Was er tut)
Stimmt, da war was. Ich arbeite zum Glück nicht mit jQuery. Die meisten Sachen gehen heutzutage auch so ziemlich einfach, dank Babel und alle neuen Dinge ab ES5.

Ich denke der Threadersteller hat schon eine Lösung(?), falls nicht, bräuchten wir mehr Code oder du setzt mal ein debugger Statement.