Diskuze: jQuery volání funkce v proměnné ve funkci

JavaScript JavaScript jQuery volání funkce v proměnné ve funkci

Avatar
user
Redaktor
Avatar
user:

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
Drahomír Hanák
Tým ITnetwork
Avatar
Odpovídá na user
Drahomír Hanák:

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
Redaktor
Avatar
user:
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
Redaktor
Avatar
user:

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
Drahomír Hanák
Tým ITnetwork
Avatar
Odpovídá na user
Drahomír Hanák:

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
Redaktor
Avatar
Odpovídá na Drahomír Hanák
user:

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.