Autor | Zpráva | ||
---|---|---|---|
gmvasek Profil |
#1 · Zasláno: 25. 12. 2008, 17:28:32 · Upravil/a: gmvasek
Zdravím, píšu si aplikaci na tahání vzdálených dat pomocí ajaxu a PHP, používám mootools. Ví někdo jak v JS fungují globální proměnné? (Googlit jsem zkoušel.) Protože tento kód píše do výsledných polí undefined a 0:
var levels; var skills; var levelinfo; var html; function handleResponse(response) { if(response.indexOf('@') == -1) { $('error').setStyle('display', 'block'); $('loading').setStyle('display', 'none'); $('error').set('text', response); ['rsnick', 'ajax-submit'].each(function(idecko){ $(idecko).disabled = false; }); } else { skills = new Array('total', 'attack', 'defence', 'strength', 'hitpoints', 'ranged', 'prayer', 'magic', 'cooking', 'woodcutting', 'fletching', 'fishing', 'firemaking', 'crafting', 'smithing', 'mining', 'herblore', 'agility', 'thieving', 'slayer', 'farming', 'runecrafting', 'hunter', 'construction', 'summoning', 'combat'); levels = response.split('@'); for(i=0; i<=25; i++) { levelinfo = levels[i].split(','); html = '<span class="tooltip">' + levelinfo[0] + '</span>'; $(skills[i] + '-result').set('html', html); $(skills[i] + '-result').addEvent('mouseenter', function() { var obj=new ProgressBar(levelinfo[4]); $('progressbar').appendChild(obj); $('skillname-detail').set('html', ucfirst(skills[i])); $('skillxp-detail').set('html', levelinfo[1]); $('skillrank-detail').set('html', levelinfo[2]); $('skilldiff-detail').set('html', levelinfo[3]); }); $(skills[i] + '-result').addEvent('mouseleave', function() { ['skillname-detail', 'skillxp-detail', 'skillrank-detail', 'skilldiff-detail', 'progressbar'].each(function(idecko){ $(idecko).set('html', ''); }); }); } $('loading').setStyle('display', 'none'); ['rsnick', 'ajax-submit'].each(function(idecko){ $(idecko).disabled = false; }); // var tooltips = new Tips($$('.tooltip'), { 'fixed': true, 'offsets': { 'x': 16, 'y': 16 }}); } } (tato funkce slouží jako callback pro ajaxový požadavek) |
||
gmvasek Profil |
#2 · Zasláno: 27. 12. 2008, 18:55:02
Prosím, ví někdo?
|
||
Chamurappi Profil |
#3 · Zasláno: 27. 12. 2008, 20:35:22
Reaguji na gmvaska:
„Ví někdo jak v JS fungují globální proměnné?“ Úplně normálně. Chybu hledej ve svých skriptech, nikoliv v principiálních nedostatcích jazyka. „tento kód píše do výsledných polí undefined a 0“ Do kterých výsledných polí? Obvyklými ladicími postupy (odmazávání, vypisování mezivýsledků) bys měl být schopen lokalizovat přesné místo, kde dostáváš, co dostávat nechceš. Jestli na to nepřijdeš, pomohla by živá ukázka. |
||
gmvasek Profil |
#4 · Zasláno: 28. 12. 2008, 09:34:00
Našel jsem, že proměnné fungují jako globální, když jsou definovány vně funkce...
To kam to píše undefined je tato část kódu: $(skills[i] + '-result').addEvent('mouseenter', function() { var obj=new ProgressBar(levelinfo[4]); // vypíše 0 $('progressbar').appendChild(obj); $('skillname-detail').set('html', ucfirst(skills[i])); // vypíše Undefined díky ucfirst $('skillxp-detail').set('html', levelinfo[1]); // vypíše 0 $('skillrank-detail').set('html', levelinfo[2]); // vypíše 0 $('skilldiff-detail').set('html', levelinfo[3]); // vypíše 0 }); Myslím si, že se ty promněnné skills a levelinfo nedostanou do té funkce... ale nevím jak je tam mám dostat. |
||
Měsíček Profil |
#5 · Zasláno: 30. 12. 2008, 16:22:14 · Upravil/a: Měsíček
Reaguji na gmvasek:
"Našel jsem, že proměnné fungují jako globální, když jsou definovány vně funkce... " To jsou mi věci. Spíše tam půjde o klíčové slovo var. <script type="text/javascript"> /** * Definování proměnných */ var a = 10; var _1a; b = 11; var _1b; /** * Definování funkcí */ function _a ( ) { var _1a = 3; alert(a+_1a); } function _b ( ) { _1b = 3; alert(b+_1b); } /** * Volání funkcí */ _a (); // 13 _b (); // 14 /** * Volání proměnných definovaných či deklarovaných * ve funkci. */ alert(_1b); // 3 alert(_1a); // undefined ** </script> |
||
gmvasek Profil |
#6 · Zasláno: 31. 12. 2008, 11:07:38
Díky, už jsem to rozchodil...
|
||
Časová prodleva: 15 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0