Element, jenž není null prý je – JavaScript, AJAX, jQuery – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Element, jenž není null prý je – JavaScript, AJAX, jQuery – Fórum – Programujte.comElement, jenž není null prý je – JavaScript, AJAX, jQuery – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené — příspěvek s řešením.
Matěj Andrle+1
Grafoman
2. 3. 2014   #1
-
0
-

Dobrý den,
několik elementů mi v JS konzoli hlásí, že jsou null/undefined, a nelze proto nastavovat jejich vlastnosti atp. Jenže ono to funguje. Normálně vše jede - všechny vlastnosti elementů stěžujících si na null/undefined pracují jak mají. Problém nastává, když chci takovýto element ovládat z HTML - třeba v onclick li mám location.replace na iframe - a to už nejen, že hodí error, to už ani nefunguje...

dialog = document.getElementById("dialog");
section = document.getElementsByTagName("section")[0];
dialogContainer = document.getElementById("dialogContainer");
dialog.onload = function(){dialogContainer.style.display = "block";}

Zde třeba prý nejde nastavit onload iframe - přitom to funguje. dialog rozhodně není null... Mám to samozřejmě ve window.onload a jak píši - z JS jde všechno. Všechny stěžující si elementy musím handlovat z JS - jinak to nejde...

Uncaught TypeError: Cannot set property 'onload' of null main.js:22
window.onload main.js:22
Uncaught TypeError: Cannot read property 'location' of undefined (index):36
onclick

Na 22. řádku je nastavení onload toho dialogu (iframe)... 36. řádek index.php zní:

<li onclick="dialog.contentDocument.location.replace('manage.php')">Spravovat</li>

(proměnná dialog vzniká ještě před načtením celé stránky - vždy všechny globální proměnné definuji v hlavičce scriptu)

Zase - při alokaci eventu z JS to jede. O co mu jde? :D

http://kdlap.lerainsoft.eu

Klikněte na "Spravovat" -> error. Dejte do konzole: "dialog.contentDocument.location.replace("manage.php")" a jede to (byť s errorem) - nechápu...

Děkuji.

Nahlásit jako SPAM
IP: 78.136.155.–
Řešení
Matěj Andrle+1
Grafoman
2. 3. 2014   #2
-
0
-
Vyřešeno Nejlepší odpověď

Problém téměř vyřešen:
 

if(dialog.contentDocument)
	dialogDocument = dialog.contentDocument;
else if(dialog.contentWindow)
	dialogDocument = dialog.contentWindow.document;
else if(dialog.document)
	dialogDocument = dialog.document;

Nyní to jede, ale error s null nezmizel...

Nahlásit jako SPAM
IP: 78.136.163.–
peter
~ Anonymní uživatel
4016 příspěvků
3. 3. 2014   #3
-
0
-

Na tom linku se zobrazi jakasi hosting stranka. Nevim, jestli je to to, co jsi nam chtel zrovna ukazat. "Doména je zaregistrována".

contentDocument - ma pro ruzne prohizece ruznou podobu zapisu (viz tvuj druhy prispevek)

Sahat do framu, ktery ma stranku z ciziho serveru ti tez prohlizec nemusi umoznit.

Zkousel jsi alerty?
alert(dialog)
alert(dialog.contentDocument)
Pokud je dialog null, pak to znamena, ze je null, ze tam neni. V tom pripade by bylo dobre script presunout na konec stranky, kdy uz tag existuje a nebo vyuzit onload u body nebo window.onload, aby se to spustilo az po nacteni html kodu. Kdyz ten tag neexistuje, tak tam neni, to je logicke :)

Nahlásit jako SPAM
IP: 2001:718:2601:400:0:5efe:...–
Matěj Andrle+1
Grafoman
3. 3. 2014   #4
-
0
-

Do toho iframu odesílám formulář. Problém byl jediný - cache. Prohlížeč si totiž ukládá cache i podle QueryStringu, tak jsem mu to zatrhl a jede to... Jinak ten hosting je kamaráda, takže se ani nedivím - jdu to dát na oficiální upload...

Nahlásit jako SPAM
IP: 78.136.181.–
Matěj Andrle+1
Grafoman
3. 3. 2014   #5
-
0
-

http://lahiro.comli.com/

Nahlásit jako SPAM
IP: 78.136.181.–
peter
~ Anonymní uživatel
4016 příspěvků
4. 3. 2014   #6
-
0
-

Ok, kdyz to mas vyresene. Jinak, pri nacteni stranky mam v JS konzoli tyto chyby:

Chyba: ReferenceError: invalid assignment left-hand side
Zdrojový soubor: http://lahiro.comli.com/main.js, Řádek: 101, Sloupec: 4
Zdrojový kód:  if(key < 48 || key > 57 || key = 13)

Varování: SyntaxError: test for equality (==) mistyped as assignment (=)?
Zdrojový soubor: http://lahiro.comli.com/main.js, Řádek: 34, Sloupec: 59
Zdrojový kód:   if(deleteButton = dialogDocument.getElementById("delete"))

Pri kliknuti na Spravovat naskoci
Chyba: ReferenceError: manage is not defined
Zdrojový soubor: http://lahiro.comli.com/, Řádek: 1

Pri kliknuti na Pridat, Domu, Filtrovat
Chyba: ReferenceError: goTo is not defined
Zdrojový soubor: http://lahiro.comli.com/, Řádek: 1

Nahlásit jako SPAM
IP: 2001:718:2601:400:0:5efe:...–
Matěj Andrle+1
Grafoman
4. 3. 2014   #7
-
0
-

To první je jasné - ano, má tam být ==. Ty další 2 vidím poprvé v životě... :D A popravdě nevím co s tím - není to zase cache? (Kamarád s Operou a nevím čím vším - webdeveloper - mi nic takového neposlal...)

Nahlásit jako SPAM
IP: 78.136.142.–
peter
~ Anonymní uživatel
4016 příspěvků
4. 3. 2014   #8
-
0
-

if(deleteButton = dialogDocument.getElementById("delete"))
- to je to same jako s tim key, kdyz das a=b, tak ta operace je vzdy uspesna, tudiz neni treba se na vysledek ptat pres if

ReferenceError: manage is not defined
ReferenceError: goTo is not defined
- znamena, ze neni defined, ze tam nemas var

Nahlásit jako SPAM
IP: 2001:718:2601:400:0:5efe:...–
Matěj Andrle+1
Grafoman
4. 3. 2014   #9
-
0
-

Není. Zde testuji existenci elementu - když existuje, rovnou ho použiji. Hele nejsem žádný začátečník... :D

Jsi mimo - totálně. var v JS je jako hovno na botě - k ničemu. Vím co je undefined a NULL. Znám detailně rozdíly a popisoval bych ti je tu hodiny - začal bych alokací paměti a zkončil nevím kde. Problém tkví v tom, že přistupuji přes dynamicky vkládaný obsah - takže musím řešit tyto různé initializace v rámci dynamického načtení - což se mi podařilo myslím úspěšně. Jen hold něco málo uteče - ohladnovat to celé nejde - každá stránka prudí s errory. Já se zatím pyšním bezchybnými weby - jak jsem psal - nechápu kde se to bere - mělo by to být ohandlované - zkus smazat cache...

Základy JS:

if(!0)alert(":D"); -> provede se! Totéž s NULL a undefined. Dále pak "" a prázdnými poli. Platí to pro 99% dynamických jazyků - PHP, Perl, Lua,...

V Chromiu prostě nemám žádnou chybičku - a ve validátoru také ne...

Nahlásit jako SPAM
IP: 78.136.175.–
peter
~ Anonymní uživatel
4016 příspěvků
5. 3. 2014   #10
-
0
-

To zalezi na tom, jak maji nastavenou konzolu. Kdyz ji nastavi tak, aby nehlasila zjevne chyby, to se pak ani nemuzes divit tem castym dotazum na jakpsatweb.cz, ze stranka vsude jinde je v pohode, jen chrome ji zobrazuje jinak :)

Nahlásit jako SPAM
IP: 2001:718:2601:400:0:5efe:...–
Matěj Andrle+1
Grafoman
5. 3. 2014   #11
-
0
-

Podívej vzít radu od člověka, který si myslí, že v dynamickém jazyce musí alokovat proměnnou... Přitom je úplně jedno kde ji použiješ - jak ji jednou použiješ, od té doby existuje. Takže i parametry funkcí atd. Dále pak - ať to hlásí cokoliv - error ti nahlásí 99% stránek - protože JS je jazyk s biliardami podobami, kvůli tomu, že existuje biliarda interpretů (webových prohlížečů)... K směšné poznámce o debuggingu - Chromium je jeden z nejlepších prohlížečů na webovou tvorbu - máš tam breakpointy a vůbec - se všemi pluginy atd. A ta stránka na kterou odkazuješ - tak na tu už nikdy neodkazuj... (Je to pěkná pohádka na dobrou noc.)

To co ti píše undefined nejsou proměnné, ale funkce - takže to nesouvisí s JS... Víš - to souvisí s DOM - hold máš prohlížeč, který neumí pracovat s HTML handlováním eventů. Ano přendám to do JS - co mi zbývá... DOM != JS, var != alokace místa jako ve statickém jazyce, atd. Toto jsem viděl jen v Opeře u bratra - jak může nefungovat propojení DOM s JS??? Nepochopím tohle nikdy... (ano, právě proto, že DOM je propojením toho všeho)

Takže ten tvůj pojebaný prohlížeč mi teď přidělal toliko práce:

<li onclick="goTo('home')">
	Domů
</li><li onclick="goTo('add')">
	Přidat
</li><li onclick="goTo('filter')">
	Filtrovat
</li><li onclick="manage()">
	Spravovat
</li>

Teď musím udělat id, a podle id pak v JS handlovat - getElement... Proč? (nadávám, jelikož musím přepsat každý event do JS - k čemu to pak v HTML vůbec existuje...)

Nahlásit jako SPAM
IP: 78.136.162.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 11 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý