Autor | Zpráva | ||
---|---|---|---|
návštěvník Profil * |
#1 · Zasláno: 24. 5. 2015, 11:07:50
Ahoj,
v Jquery mám událost .mousemove. Uvnitř mám objekt dragged, který by měl obsahovat objekt dragged.point.p. Stane se že na konzoli mi to vypíše že objekt p neexistuje. Problém je ale v tom jak to odladit. if (dragged !== null && dragged.node !== null) { if ( typeof dragged != 'undefined') { console.log("UNDEFINED"); console.log(dragged); console.log("A)"); console.log(dragged.p); console.log("B)"); console.log(dragged.p.x); console.log("C)"); console.log(dragged.p.y); testn=2; throw new error; } dragged.point.p.x = p.x; dragged.point.p.y = p.y; } Výpis: "NOTE: fade++ nebyl proveden protože rodičem je Nejoblíbenější kruhy(rodič iniciátora události)" my_springyui.js:533 "UNDEFINED" my_springyui.js:299 Object { node: Object, point: Object, distance: 0.19740937107841627 } my_springyui.js:300 "A)" my_springyui.js:301 undefined my_springyui.js:302 "B)" my_springyui.js:303 "UNDEFINED" my_springyui.js:299 Object { node: Object, point: Object, distance: 0.19740937107841627 } my_springyui.js:300 "A)" my_springyui.js:301 undefined my_springyui.js:302 "B)" my_springyui.js:303 "UNDEFINED" my_springyui.js:299 Object { node: Object, point: Object, distance: 0.19740937107841627 } my_springyui.js:300 "A)" my_springyui.js:301 undefined my_springyui.js:302 "B)" my_springyui.js:303 "UNDEFINED" my_springyui.js:299 Object { node: Object, point: Object, distance: 0.19740937107841627 } my_springyui.js:300 "A)" my_springyui.js:301 undefined my_springyui.js:302 "B)" my_springyui.js:303 "UNDEFINED" my_springyui.js:299 Object { node: Object, point: Object, distance: 0.19740937107841627 } my_springyui.js:300 "A)" my_springyui.js:301 undefined my_springyui.js:302 "B)" my_springyui.js:303 TypeError: dragged.p is undefined my_springyui.js:304 Nemohu se v tom výpisu vyznat protože to vůbec neodpovídá tomu co mám v kódu. C) tam vůbec není, místo toho tam je undefined a pak zase UNDEFINED. Ale throw new Error() je až za C). Štve mě na tom to že ten kód nejde celý přerušit v ten moment kdy nastane 'undefined' a zdá se že to neukazuje ty hodnoty co tam byly v ten okamžik kdy nastal problém, prostě tam je jen link na objekt který se dál mění, takže jak mám prohlédnout ty informace co tam byly v tom daném čase? |
||
juriad Profil |
#2 · Zasláno: 24. 5. 2015, 11:27:06
„undefined my_springyui.js:302“ říká, že dragged nemá atribut p, což je vidět i na výpisu „Object { node: Object, point: Object, distance: 0.19740937107841627 } my_springyui.js:300“ (má jen node, point a distance).
Tedy „dragged.p.x“ způsobí, že se ptáš na atribut x undefinedu, což způsobí chybu a vykonávání JS se v ten okamžik ukončí. Mimochodem, throw new error; je blbě. Ten konstruktor se jmenuje Error s velkým E.
|
||
juriad Profil |
#3 · Zasláno: 24. 5. 2015, 11:29:06
Nepleteš si náhodou dragged.point a dragged.p?
|
||
návštěvník Profil * |
#4 · Zasláno: 24. 5. 2015, 12:02:07
juriad:
To všechno ale vím. Ale ten problém se týká toho KDY se tak stane. V který okamžik. Prostě tam běží další události a je to nepřehledné. Já potřebuju zjistit jak se to stane že ten dragged.point.p není vyplněn. A nevím jak to mám vysledovat když ten script se nezastaví přesně v ten okamžik co potřebuju. Cpou se tam ještě další hlášky protože běží dál. PS: v tom console.log jsem to napsal blbě. Dragged obsahuje point.p ne p |
||
juriad Profil |
#5 · Zasláno: 24. 5. 2015, 12:49:03
Přidej si breakpoint s podmínkou: www.softwareishard.com/blog/firebug/firebug-tip-conditional-breakpoints
Jelikož JS běží v jediném vláknu, nevěřím, že se objevují nějaké hlášky poté, co se zastaví na nějakém breakpointu. |
||
návštěvník Profil * |
#6 · Zasláno: 24. 5. 2015, 13:20:03 · Upravil/a: návštěvník
A co říkáš na toto:
if (dragged !== null && dragged.node !== null) { if ( typeof dragged.point.p == 'undefined') { console.log("UNDEFINED"); console.log(dragged); console.log("A)"); console.log(dragged.point.p); console.log("B)"); console.log(dragged.point.p.x); console.log("C)"); console.log(dragged.point.p.y); testn=2; throw new Error(); } dragged.point.p.x = p.x; dragged.point.p.y = p.y; } ReferenceError: p is not defined my_springyui.js:328 ReferenceError: p is not defined my_springyui.js:328 proč se to nezastaví když dragged.point.p je undefined? chci říct proč to neskočí do bloku s podmínkou? Jak napsat podmínku aby to skočilo jak to nastane undefined? |
||
juriad Profil |
#7 · Zasláno: 24. 5. 2015, 13:33:54
návštěvník:
Zřejmě je dragged.point.p definované. Ta chyba ReferenceError je způsobená až na 18. řádku kódu, který jsi ukázal, tam proměnná p neexistuje.
Co vlastně chceš? Říkáš tady slova jako nezastaví, neskočí, nejde přerušit. Jakmile v JS dojde k výjimce, ta se vrací zásobníkem nahorů, dokud ji někdo nezachytí nebo nedojde na začátek (v takovém případě ji prohlížeč zapíše do konzole). Asi tuším, že chceš doplit hodnotu v nějakém objektu, pokud náhodou neexistuje. Nevím však, zda máš problém s debugováním v prohlížeči nebo s kódem v JS. Tuším, že s obojím. |
||
návštěvník Profil * |
#8 · Zasláno: 24. 5. 2015, 14:11:13 · Upravil/a: návštěvník
Dal jsem tam break point ale bylo to na nic. Vyzkoušej:
http://seznamka.moxo.cz/ ikony nejsou načtené. Vlevo nahoře je "Zábava". Klikneš a táhneš v místě kde by měla být ikona a vyskočí ReferenceError: řádek 329. dám tam breakpoint, reload stránky, kliknu a táhnu, pak se to zastaví na ř. 329. Pak 4x zmáčknu "step out" a zase je tam ta chyba. Jenže debuger mi neskočil na žádný konkrétní řádek (i když vím že ta chyba je na 329). Pro vysvětlení: dragged se nastaví na nejbližší tažený objekt node vrácený funkcí layout.getNode poté co byla vyvolána událost jQuery(canvas).mousedown. Dále probíhá událost jQuery(canvas).mousemove - ten blok co nás zajímá je na ř. 312. Pokud dragged je null tak neskočí do bloku. Jenže z neznámých důvodů se dragged nenastavil. To by ale nemělo nastat když .mousemove nastavil dragged na objekt nejbližšího uzlu... |
||
juriad Profil |
Na 329. řádku používáš proměnnou p, která neexistuje, na pravé straně přiřazení. Nic víc na tom není. To způsobí chybu, která sestřelí zbytek zpracování události.
Step out znamená, že se pokračuje vykonávání programu a má se opět zastavit na místě, které zavolalo poslední funkci. To je důvod, proč 4 step out tě vynesou ven ze zpracování události do jQuery a z něj pak ven. Proč to funguje i po té chybě mi není jasné, nejspíš jde o nějakou vlastnost firebugu. S dragged není problém; problém je s proměnnou p. |
||
návštěvník Profil * |
#10 · Zasláno: 24. 5. 2015, 14:43:39
Já se pořád díval na levou stranu v přesvědčení že tam není ten člen .p .... Díky moc.
|
||
Časová prodleva: 9 let
|
0