Autor Zpráva
Rakosnicek
Profil *
Hoyte, co je prosím špatně na tomhle? Potřebuji, aby při každým kliknutí se ten obrýzek měnil.

<script>
var jedna = this.src='obrazek.jpg';
var dva = this.src='obrazek2.jpg';
var blik = jedna;

function lol(x, y, z)
{
if(x==y)
{x=z}

if(x==z)
{x=y}

return x;
};


</script>

<img src="obrazek.jpg" onclick="lol(blik, jedna, dva);">

Moderátor Joker: Vkládej prosím kódy mezi značky [pre] a [/pre] (stačí kliknout na ).
Joker
Profil
Rakosnicek:
Hoyte
Hoyte?

co je prosím špatně na tomhle? Potřebuji, aby při každým kliknutí se ten obrýzek měnil.
V tom případě je na tom špatně to, že ta funkce nic takového nedělá, resp. nemění ten obrázek.
Rakosnicek
Profil *
A proč to nemění?
petr 6
Profil
Rakosnicek:
A proč to nemění?
Protože je to tak napsané,
řádek 8 až 9: Pokud blik je rovno jedna (splněno), pak nastav x rovno z,
řádek 11 až 12: Pokud x je rovno z (splněno přiřazením na řádku 9), pak nastav x rovno y, tedy x rovno jedna.
Řádek 14: vrať x, tedy vrať jedna, tedy vracíš vždy hodnotu jedna. Nic se nemění.

Navíc ti chybí středníky před uzavírací složenou závorkou na řádcích 9 a 12, bez kterých to (poud vím) nemůže fungovat.

A otázka je, jestli by to fungovalo i tak, vzhledem k tomu, že to tvoje this není spojené s tím konkrétním obrázkem img.

Potřebuji, aby při každým kliknutí se ten obrýzek měnil.
Napiš nebo najdi si kód, který ti to provede. Nebo potřebuješ, aby ti to někdo napsal?
Witiko
Profil
petr 6:
Navíc ti chybí středníky před uzavírací složenou závorkou na řádcích 9 a 12, bez kterých to (poud vím) nemůže fungovat.
Středníky jsou dobrovolné, pokud jsou jednotlivé příkazy odděleny jinak, například odřádkováním.


Tohle by mělo dělat to, co hledáš. Zcela drycoded, neozkoušel jsem:
<script type="text/javascript">
/* Definice globálních proměnných */

var obrazky = ["obrazek.jpg", "obrazek2.jpg"];
var nyni = obrazky[0];

/* Definice Array.indexOf metody pro MSIE */

if(!Array.indexOf){
  Array.prototype.indexOf = function(obj){
   for(var i=0; i<this.length; i++){
    if(this[i]==obj){
     return i;
    }
   }
   return -1;
  }
}

/* Definice metody prepni

 element: element obrázku, jehož src se mění
 nyni: aktuální src obrázku
 pole: pole obrázků, ze kterého se vybírá */

function prepni(element, nyni, pole)
{

  /* Nejprve zjistíme kde v poli je aktuální obrázek */
  var index = pole.indexOf(nyni);
  
  /* Pokud je na konci pole, vrátíme se na začátek, jinak se posuneme o pozici v poli dopředu */
  if(index == pole.length - 1) index = 0;
  else index++;
  
  /* Přiřadíme elementu nový obrázek a vrátíme daný src tak, aby si ho volající funkce mohla uložit do globální proměnné nyni. */
  return element.src = pole[index];
};
</script>

<img src="obrazek.jpg" onclick="nyni = prepni(this, nyni, obrazky);">
Chamurappi
Profil
Reaguji na Witika:
Proč dáváš do proměnné nyni řetězec a proč ho pak dohledáváš v poli? Proč si neukládáš jen ten současný index?

Pokud je na konci pole, vrátíme se na začátek, jinak se posuneme o pozici v poli dopředu
Jinými slovy: index = (index + 1) % pole.length;

Středníky jsou dobrovolné, pokud jsou jednotlivé příkazy odděleny jinak, například odřádkováním.
Až mu jednou to odřádkování nedbale zlikviduje pakovač kódu (třeba Packer to dělává), začne onu dobrovolnost proklínat :-)

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: