Kann mir jemand bei dem Popup auf meiner Webseite helfen?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Eine ID darf nur einmal im Dokument verwendet werden. Ähnliches gilt für die Auszeichnung von Überschriften in Bezug auf dessen Semantik. Von einer wiederholten Verwendungen der <h1> Überschrift also absehen solltest.

Was jetzt deine Karten angeht, erstellst du eine „addToCart” Funktion mit der du auf ein Click-Event reagierst. Die Funktion dann z.B. mit einer ForEach-Schleife für alle Karten ausführen lässt, sobald die jeweilige Karte der Button geklickt wurde.

HTML:

<div class="card">
  <div class="card-body">
    <h4>Article...</h4>
    <button class="card-btn">Add to cart</button>
  </div>
  <div class="card-popup">
    <p>Article added to cart.</p>
  </div>
</div>

JavaScript:

const cards = document.querySelectorAll('.card-body button');
const popup = document.querySelectorAll('.card-popup');

const addToCart = (item, index) => {
 item.addEventListener('click', () => {
  popup[index].classList.add('active');
   setTimeout(() => {
    popup[index].classList.remove('active');
   }, 1500);
 });
}

cards.forEach(addToCart);

CSS:

.card-popup { 
  display: none; 
}

.card-popup.active {
  display: flex;
}
Woher ich das weiß:Berufserfahrung – UI/UX Designer, Full-Stack Developer
Jason680 
Fragesteller
 06.01.2024, 22:30

Und das sollte für alle 6 produkt karten helfen wenn ich das in html bei allen einfüge ?

0
medmonk  06.01.2024, 22:36
@Jason680

Kurz und knapp: Ja, das reicht aus.

Mit querySelectorAll werden alle Buttons angesprochen, die als Child-Element von einem Element mit der Klasse card-body enthalten sind. Dasselbe gilt ebenfalls für das Popup - und beim Ausführen über eine ForEach Schleife durch iteriert wird.

Es spielt somit keine Rolle ob du am Ende nur 5 oder 500 solcher Elemente angelegt hast. Solange die Struktur gleich ist, wird es auf alle anderen angewendet. Die Funktion kannst jedoch auch für andere weiter verwenden.

1
Jason680 
Fragesteller
 07.01.2024, 13:45
@medmonk

Also ich habe es grade so eingefügt aber es geht irgendwie nicht

html: <div class="card6">

<div class="card-body">

 <img src="Plektren.jpg" style="width:70%">

 <h1>Redamancy 24 Stück Guitar Picks</h1>

 <p class="price6">3,99€</p>

 <p>Guitar Picks, 3 Verschiedene Stärke Plektrum 0,46mm

 / 0,71mm / 0,96mm, für Bass E-Gitarre Akustikgitarre Ukulele </p>

<p><button class="card-btn">Kaufen</button></p>

</div>

</div>

<div class="card-popup">

<p>Gekauft.</p>

</div>

Java:

const cards = document.querySelectorAll('.card-body button');

const popup = document.querySelectorAll('.card-popup');

const addToCart = (item, index) => {

 item.addEventListener('click', () => {

 popup[index].classList.add('active');

  setTimeout(() => {

   popup[index].classList.remove('active');

  }, 1500);

 });

}

css:

.card-popup {

 display: none;

}

.card-popup.active {

 display: flex;

}

so sieht es jetzt aus

0
medmonk  07.01.2024, 13:58
@Jason680

Bitte verwende eine Plattform wie CodePen oder JSFiddle, sodass man direkt nachschauen kann. Was jetzt das JavaScript angeht, wird überhaupt ein Funktionsaufruf gemacht? Hast du die letzte Zeile mitkopiert?

cards.forEach(addToCart);
0
Jason680 
Fragesteller
 07.01.2024, 17:09
@medmonk

Hab es in codepen jetzt geschrieben wie kann ich das hier einfügen ?

0
Jason680 
Fragesteller
 07.01.2024, 17:12
@Jason680

heiße da auch Jason680 evtl findest du es da

0
Jason680 
Fragesteller
 12.01.2024, 18:30
@medmonk

Also ich muss die webseite übernächste woche donnerstag abgeben und das ist mein letztes problem

0
medmonk  17.01.2024, 09:53
@Jason680

Ich war die vergangenen Tage sehr beschäftigt und deine Rückmeldung ist bei irgendwie untergegangen. Wenn du alles so übernommen hast und die Funktion aufrufst, sollte es auch wie beschrieben funktionieren.

Hab es in codepen jetzt geschrieben wie kann ich das hier einfügen ?

Den Link kopieren und hier einfügen.

0
medmonk  17.01.2024, 12:00
@Jason680

Ich habe es mir gerade angesehen und es funktioniert, sofern das HTML von meinen Snippet richtig übernommen wurde. Du hast es nicht bei allen Items angepasst und du <button> Elemente in einem <p> Element verschachtelt sind.

Lade dir das Zip-Archiv herunter und schau dir die Demo an. Danach überträgst du es auf dein Projekt, dann funktioniert es auch so wie es sein soll.

https://workupload.com/file/HamaEe49gZk

0
Jason680 
Fragesteller
 17.01.2024, 14:39
@medmonk

Aber so ist ja dann alles verändert ich wollte doch nur ein pop up über dem button haben und keine kommplet geänderten produktkarten. Außerdem kann ich die datein aus der zip nicht in meinem bearbeitungsprogramm öffnen

0
Jason680 
Fragesteller
 17.01.2024, 14:54
@Jason680

Okay vergiss die zip ich habs irgendwie meine letzte frage ist: das pop up ploopt rechts neben jeder karte auf und ist immer schwarz (sowohl balcken als auch schriftfarbe kann ich das noch verändern das das direkt über dem jeweiligen button ist ? und das man die Schrift erkennen kann ? (andere farbe?)

0

Das liegt daran, dass du in der JS Funktion fest das Element mit der ID"myPopup" referenzierst. IDs sollten einmalig sein, was in deinem HTML nicht der Fall ist. Am Besten die ID entfernen und das dem Button zugehörige Popup mit closest() ermitteln.

Das könntest du z.B. so ändern:

function myFunction(this){
    const popup = this.closest('.popuptext');
    popup.classList.toggle('show');
}

Im HTML dann entsprechend

<button class="popup" onclick="myFunction(this)">

Noch besser wäre es, keinen inline onclick zu verwenden, sondern den EventListener mit addEventListener und einer forEach Schleife anzuhängen.

Woher ich das weiß:Hobby – Entwickle seit ca 5 J. Software in vers. Programmiersprachen
Jason680 
Fragesteller
 26.12.2023, 12:07

so wie du es mir geschrieben hast, funktoniert es nicht so richtig weßt du woran es liegen kann ? Weil das Ding ist ich brauche das ja für sechs button.

0
guteantwort626  26.12.2023, 16:54
@Jason680

Kannst du den Code mal z.B. auf Codepen oder jsfiddle einfügen, und den Link hier teilen? Ist sonst immer sehr schwer, ohne den aktuellen Stand zu sehen...

0
Jason680 
Fragesteller
 26.12.2023, 19:01
@guteantwort626

Habe kein codepen ja gut wie gesagt hab es nur um das verändert wie du es geschrieben hast

0