/ / Prečo nemôžem definovať funkcie v jQuery's document.ready ()? - javascript, jquery

Prečo nemôžem definovať funkcie vo formáte document.ready () jQuery? - javascript, jquery

Funkcie prídu ako nedefinované, ak ich umiestním do funkcie document.ready ():

$(document).ready(function(){
function foo()
{
alert("Bar");
}
});

foo(); // Undefined

Prečo sa to deje? Som si istý, že potrebujem nejaké jednoduché pochopenie :)

odpovede:

61 pre odpoveď č. 1

Nie ste si istí, prečo definovanie funkcie v rozsahu ready() je pre vás dôležité, ale môžete to urobiť vyhlásením foo vpredu:

<html><head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.min.js"></script>
<script>
var foo;                           // Here"s the difference
$(document).ready(function(){
foo = function ()
{
alert("Bar");
}
});
</script></head><body>
<input type="button" onclick="foo()" value="Click me">
</body></html>

Je zrejmé, že nemôžete volať foo() z inline skriptu bezprostredne po ready() pretože ready() kód ešte nebol spustený, ale funkciu môžete neskôr zavolať.

Len sa uistite, že sa nič nemôže pokúsiť zavolať foo() pred ready() kód spustil (alebo urobil pôvodné vyhlásenie o foo() neškodná funkcia).


24 pre odpoveď č. 2

Môžete, ale musia byť povolaní v rámci pôsobnosti ready() metóda inak strácajú rozsah, keď ready() ukončí metódu.

Napríklad nasledujúci kód bude fungovať:

$(document).ready(function(){
function foo()
{
alert("Bar");
}

foo(); // still in the scope of the ready method
});

6 pre odpoveď č. 3

Prichádzajú to ako nedefinované, ak ich dáteakýkoľvek rozsah, ktorý nie je ich. Ak ich naozaj chcete použiť mimo rozsahu $ (document) .ready (...), potom ich musíte vykázať navonok. Ako napríklad:

var foo;

$(document).ready(function(){
foo = function()
{
alert("Bar");
}
});

foo(); // works now because it is in scope

Dúfam, že to pomôže.


4 pre odpoveď č. 4

Vaša funkcia je definovaná v rámci $(document).ready() spätné volanie a nemôže byť vidieť od zvonka, Buď definujte funkciu mimo $(document).ready() rozsah volania iba z vnútra.


1 pre odpoveď č. 5
<script>
$(document).ready(function(){
myfnc = function (param1, param2)
{
alert("Hello");
}
myfnc();
});
</script>
<input type="button" onclick="myfnc("arg1", "arg2")" value="Click me">

0 pre odpoveď č. 6

Len ďalší prírastok:

Pri deklarovaní funkcií alebo premenných vo vnútri $(document).ready() funkcia, tieto sú pri používaní neprístupné onclick() v dokumente.

Môžete buď presunúť svoje vyhlásenia mimo $(document).ready(), alebo môžete použiť $("#element").on("click", function() {}) v rámci `$ (document) .ready ().