• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Przeniesienie wartości przez funkcję

0 głosów
382 wizyt
pytanie zadane 26 marca 2017 w JavaScript przez Mimoid Użytkownik (760 p.)

Hej. Tak wygląda mój kod HTML:

  <img src="obrazek_dom.png"  id="o1"   alt="keyo1"  onclick="pressed();"/>
  <img src="obrazek_dach.png" id="o2"  alt="keyo2" onclick="pressed();"/>
  <img src="obrazek_okno.png" id="o3"  alt="keyo3" onclick="pressed();"/>

Potrzebuję jakiegoś sposobu, aby przenieść wartość liczbową do funkcji. Na przykład po wciśnięciu na obrazek_dom.png do funkcji idzie liczba 1, po wciśnięciu obrazek_dach.png do funkcji idzie liczba 2 itd.

Wpisanie w nawiasy, pressed(), danej liczby nie działa. Stworzenie zmiennej przed utworzeniem obrazków i wstawienie go jako argument funkcji również nie działa. Jakieś pomysły? 

 

1 odpowiedź

+2 głosów
odpowiedź 26 marca 2017 przez ScriptyChris Mędrzec (190,190 p.)
wybrane 26 marca 2017 przez Mimoid
 
Najlepsza
<img src="obrazek_dom.png"  id="o1"   alt="keyo1"  onclick="pressed();"/>

Chcesz przekazać do funkcji pressed() liczbę, najlepiej taką która oznacza numer obrazka? Dlaczego 

Wpisanie w nawiasy, pressed(), danej liczby nie działa

nie działa? Pokaż kod JavaScript. Może zapominasz o argumencie w deklaracji funkcji?


Możesz to zrobić na parę sposobów, zaczynając od onclick wybrałeś jeden z gorszych :) 

Spróbuj w ten sposób:

<img src="obrazek_dach.png" id="o2"  alt="keyo2">
document.querySelector( 'img' ).addEventListener( 'click', function() {
     var pictureNumber = this.id.slice( 1 );
     alert( 'Obrazek numer: ' + pictureNumber );
} );

Z racji tego, że masz kilka obrazków, żeby nie doczepiać do każdego z nich EventListenera, zastosuj EventDelegation - owiń wszystkie obrazki np. elementem <div>, na niego ustaw EventListener i wtedy pozyskuj sobie numer obrazka za pomocą event.target.id.

komentarz 26 marca 2017 przez Mimoid Użytkownik (760 p.)
Wielkie dzięki. Właśnie skróciłeś mój kod z 1500 linijek do 100 xD
komentarz 26 marca 2017 przez ScriptyChris Mędrzec (190,190 p.)
Masz 1500 obrazków na stronie? :)
2
komentarz 26 marca 2017 przez kap Stary wyjadacz (11,620 p.)
A co to za jakieś kombinacje z id stosujesz? Skoro nie korzystasz z id do identyfikacji elementu to możesz go w ogóle nie uzywać i zamiast tego uzyć pola, które z założenia służy do przechowywania danych: `data-` (np `data-id`) - nie musisz wtedy kombinować z jakimiś prefiksami by zapewnić unikalność.
komentarz 26 marca 2017 przez ScriptyChris Mędrzec (190,190 p.)

Racja, można tutaj skorzystać z atrybutu data-*. Jednak autor korzystał z id, więc nie chciałem mieszać.

komentarz 26 marca 2017 przez Mimoid Użytkownik (760 p.)

@Krzychu92 Nie mam 1500 obrazków na stronie. To tylko urywek kodu, który z rozwiązaniem od ciebie, zmienił całą resztę skryptu(ctrl+c, ctrl+v) na uniwersalny kod w jednym miejscu. wink

@kap Dzięki.Korzystałem z id bo nie znałem nic innego.

Podobne pytania

0 głosów
1 odpowiedź 1,120 wizyt
0 głosów
2 odpowiedzi 996 wizyt
pytanie zadane 23 stycznia 2019 w C i C++ przez thekibi27 Bywalec (2,110 p.)
0 głosów
1 odpowiedź 247 wizyt

93,424 zapytań

142,421 odpowiedzi

322,643 komentarzy

62,782 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...