Autor Zpráva
Mufna
Profil
Zdravím Vás. Prosím poraďte mi, kde mám chybu v následujícím kódu. V první funkci se mění proměnná "pos", tuto změnu má zachytit druhá funkce a předat číselnou hodnotu do třetí fce. Nechce mi to ale pořád fungovat. Když dám přímo číslo do 2. fce (třeba "4"), tak si to ta třetí fce vezme a funguje to OK. Ale pokud chci, aby se to číslo předalo z proměnné "pos", tak to nefunguje. Možná je to jen nějaká syntaktická chyba, ale nevím.
// inicializace proměnných

var pos = 0;
var posCheck = 0;

// 1. fce
nextBtn.bind("click", function() {
  pos += 1;
  if (pos == pictEls) { pos = pictEls-1; }
  nextBtn_enabled = false;
  var move = -(pictWidth*pos);
  container.find("p").animate({ left: move}, settings.easeTime, settings.easeFunc);
  return false;
});

// 2. fce
function positionChecking(pos) {
    posCheck = pos;
//  když tady dám přímo číslo:
    posCheck = 4;
//  tak to ve 3. fci funguje
    return posCheck;
}

positionChecking();

// 3. fce
jQuery("div#svLinks" + j + " a").each(function(z) {
  if (z == posCheck) {
    jQuery(this).addClass("test");
  }
  else jQuery(this).addClass("current");
  jQuery(this).bind("click", function() {
  jQuery(this).addClass("current").parent().parent().find("a").not(jQuery(this)).removeClass("current");
  pos = z;
  var move = -(pictWidth*z);
  container.find("p").animate({ left: move}, settings.easeTime, settings.easeFunc);
  return false;
});
});
Chamurappi
Profil
Reaguji na Mufnu:
tuto změnu má zachytit druhá funkce
Jak ji má zachytit? Pokud dobře čtu, tak positionChecking voláš jen jednou při zpracovávání celého tohoto skriptu (zřejmě při načítání).
Mufna
Profil
Chamurappi

a jak to mám upravit ? Stačí obecná, ale konkrétní rada. Předem díky.
Chamurappi
Profil
Reaguji na Mufnu:
Nerozumím, co to má dělat. Nevím, proč existují proměnné pos a posCheck, proč to není jen jedna proměnná…

Pokud jsi předpokládal, že se zavolá funkce jen proto, že nazveš argument (což je lokální proměnná předvyplněná při zavolání funkce) stejně jako globální proměnnou, tak máš o JS docela zkreslenou představu.
Mufna
Profil
Chamurappi

Nevím, proč existují proměnné pos a posCheck
o "něco" jsem se tím snažil. Obecně mi to taky vadí a přijde zbytečné, ale nějak jsem to prostě chtěl "ukuchtit" skrz tu "meziproměnnou".

Nerozumím, co to má dělat.
Chronologicky (a obecně) toto:
1) pokud se klikne na button (první funkce), tak se proměnná "pos" zvětší o 1
2) tato nová hodnota proměnné "pos" se následně předá do 3. funkce

Toť vše. Ta podmínka ve 3. funkci, tedy z == posCheck (nebo jen: z == pos, když to půjde) není teď podstatná, tu si pak upravím dle toho, co to bude dělat a co budu potřebovat, důležitý je pouze to, aby se tam vždy dostala hodnota z proměnné posCheck (nebo jen pos). Ta se mění, když uživatel klikne na button - což je jQuery objekt "nextBtn" - ten je někde na začátku definován:
var nextBtn = jQuery("a#svArrowRight" + j);


Můžeš mi prosím Chamurappi v tomto poradit ?
Chamurappi
Profil
Reaguji na Mufnu:
tato nová hodnota proměnné "pos" se následně předá do 3. funkce
Tou třetí funkcí myslíš volání, které při načtení stránky cosi dělá s nějakými odkazy? To se pochopitelně zavolá jen při načítání. Jestli se má něco dít při kliknutí, musíš to dát do funkce, která se vykonává při kliknutí.
Mufna
Profil
Chamurappi
Jestli se má něco dít při kliknutí, musíš to dát do funkce, která se vykonává při kliknutí.
jj, zkouším to nějak ukuchtit, zatím jsem se dostal k tomuhle (vyhodil jsem z toho ty věci, které se netýkají přímo toho, co teď chci udělat):
// 1. fce - upraveno
nextBtn.bind("click", function() {
  pos += 1;
  nextBtn_enabled = false;
  positionChecking();
  return false;
});

// 2. fce
function positionChecking() {
  alert(pos);  // test
  return pos;
}

positionChecking();

//  3. fce - tady jsem zatím ale "ztvrdnul", pořád nevím jak tam mám tu hodnotu dostat
//  tady to na žádný kliknutí reagovat nemá - ten další kód samozřejmě ano, ale to už se netýká
//  toho o co se snažím
jQuery("div#svLinks" + j + " a").each(function(z) {
  if (z == pos) {
    jQuery(this).addClass("test");
  }
  else jQuery(this).addClass("current");
  jQuery(this).bind("click", function() {
  jQuery(this).addClass("current").parent().parent().find("a").not(jQuery(this)).removeClass("current");
  pos = z;
  var move = -(pictWidth*z);
  container.find("p").animate({ left: move}, settings.easeTime, settings.easeFunc);
  return false;
});
});

Mufna
Profil
No tak jsem to ještě jednou celý přehodnotil :-) ... a začal jsem úplně jinak (doufám že teď už to bude správná cesta). Díky všem, kteří reagovali na mé tápání.

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: