Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
user
Tvůrce
Avatar
user:18.4.2012 21:40

Mám script který má po kliknuti na tlacitko vyvolat událost na jiném elementu:

$("#toLeft").click(function(){
         $("#container").toLeft; // toLeft je funkce v proměnné toLeft a já ji potřebuji zavolat "tady"
});

Potřebuji zavolat funkci, kterou mám uloženou v proměnné v jiné funkci. Jak? Pomůžete mi prosím...

 
Odpovědět
18.4.2012 21:40
Avatar
Odpovídá na user
Drahomír Hanák:18.4.2012 22:01

Pokud chceš vyvolat událost jiného elementu (tedy třeba click, mouseover apod.), lze použít funkci $('#container')­.trigger("clic­k"); Jestli ale máš funkci uloženou v proměnné, můžeš ji zavolat buďto přímo nazevFunkce(ar­gumenty); nebo (nazevFunkce)(ar­gumenty) a nebo přes apply nazevFunkce.ap­ply(kontext, [argument]); Kontext funkce je to this uvnitř funkce.

 
Nahoru Odpovědět
18.4.2012 22:01
Avatar
user
Tvůrce
Avatar
user:18.4.2012 22:29
var toLeft = function left(){
  rychlost = 1000;
  $(this).stop().animate({ scrollLeft: 0 }, rychlost);
};


$("#zacatek").click(function(){
         $("#container").left();
});

Zavolal jsem fci left() ale nefunguje :(

 
Nahoru Odpovědět
18.4.2012 22:29
Avatar
user
Tvůrce
Avatar
user:18.4.2012 22:52

pokud ale napíšu:

$("#container").click(toLeft);

Tak to funguje.... jenomze po kliknuti na element kterej chci odscrollovat... Ja bych potreboval aby kdyz kliknu na odkaz s id="zacatek" tak aby se na divu s id="containter" provedla fce left() (definice výše)
Nevím kde dělám chybu....

 
Nahoru Odpovědět
18.4.2012 22:52
Avatar
Odpovídá na user
Drahomír Hanák:19.4.2012 10:06

Jednak - funkce musíš definovat buďto:

function toLeft() {
   // Tělo funkce
}

A nebo použít proměnnou:

var toLeft = function() {
   // Tělo funkce
}

Obojí ale míchat nelze. Dál jsem viděl definici proměnné rychlost = 1000. Tím z ní uděláš globální proměnnou a bude dostupná všude ve skriptu (implicitně se uloží do objektu window). Použij před ní klíčové slovo var. Tedy var rychlost = 1000; a nebo ji nemusíš používat vůbec a rovnou tam napsat tu rychlost, je to jedno.
Teď k tomu tvému problému. První řešení je předat kontext funkce přes apply. Asi takhle:

$('#zacatek').click(function() {
   toLeft.apply($('#container'));
});

Nebo místo klíčového slova this ve funkci toLeft použít rovnou '#container' a funkce bude vždy scrollovat jen prvky (resp. prvek) s id="container".
Další možnost je nadefinovat jQuery vlastní událost a pak ji spustit.

// toLeft je ta naše funkce
$('#containter').bind('toLeft', toLeft);
$('#zacatek').click(function() {
   $('#container').trigger('toLeft');
});

A nebo funkci uložit jako jQuery plugin:

// Nadefinujeme funkci jako jQuery plug-in
$.fn.toLeft = function() {
  var rychlost = 1000;
  $(this).stop().animate({ scrollLeft: 0 }, rychlost);
}

$('#zacatek').click(function() {
   // Zavoláme jQuery plug-in - lze z jakéhokoli prvku
   $('#container').toLeft();
})
 
Nahoru Odpovědět
19.4.2012 10:06
Avatar
user
Tvůrce
Avatar
Odpovídá na Drahomír Hanák
user:19.4.2012 15:42

děkuji, pro mě je jquery nový "jazyk", takže tvůj příspěvek byl pro mě "naučný" => hlavně jak si vytvořit ten plugin... :D

 
Nahoru Odpovědět
19.4.2012 15:42
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.