konto usunięte

Temat: error javascript

Witam

Przygotowuję się trochę do egzaminu z html5 i javascript korzystam z tego bloga:

http://burczu-programator.pl/blog/kod-wplywajacy-na-ko...

Testuję sobie jakiś tam pierwszy lepszy kod w javascript (generalnie jeste powalający) a ja jestem trochę nowy w tych javascriptach itp. Wybrałem sobie opcję projektu w VS 2012 asp.net empty application i następnie wstawiłem sobie plik html. Wygląda to tak:


<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Htnl 5 test</title>
<script type="text/javascript">
var hello = document.getElementById("hello");
hello.firstChild.nodeValue = "blabla";
</script>


</head>
<body>



<p id="hello">
Witaj świecie!!
</p>

</body>
</html>




no i dostaje taki błąd:



Unhandled exception at line 7, column 9 in http://localhost:16158/HtmlPage1.html

0x800a138f - Błąd czasu wykonywania kodu JavaScript: Nie można pobrać właściwości „firstChild” dla niezdefiniowanego lub pustego odwołania


będę wdzięczny za pomoc. Bo strasznie mnie to irytuje, pogooglałęm coś ale jakoś nie znalazłem tego co mnie interesuje. Mam jakieś podejrzenia, że może jak się bierze projekt asp.net empy web application to możę nie dodaje jakichś rzeczy co to trzeba samemu dodać. Wartość hello jest nullem i stąd pewnie mam ten błąd tylko nie wiem czemu tam null dostaję.

pozdrawiam
Rafał

Temat: error javascript

Kod JS wykonywany jest jeszcze przed pojawieniem się elementu w drzewie. Przesuń cały kod poniżej elementu którego szukasz i zadziała :)

Można też http://www.w3schools.com/jsref/event_onload.asp
Dominik Mikiewicz

Dominik Mikiewicz maps made easy,
www.cartomatic.pl ||
cartoninjas.net

Temat: error javascript

twój skrypt wykonuje się zanim w dom znajdzie się paragraf z id "hello".
Zawiń kod w metodę i wyołaj ją jako callback dla eventu body onload.
np tak:


<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Htnl 5 test</title>
<script type="text/javascript">
var test = function(){
var hello = document.getElementById("hello");
hello.firstChild.nodeValue = "blabla";
}
</script>
<body onload="javascript:test();">
<p id="hello">
Witaj świecie!!
</p>
</body>
</html>


Edit: ha, piotr mnie uprzedził ;-)Dominik Mikiewicz edytował(a) ten post dnia 27.04.13 o godzinie 11:54

Temat: error javascript

Dominik M.:
twój skrypt wykonuje się zanim w dom znajdzie się paragraf z id "hello".
Zawiń kod w metodę i wyołaj ją jako callback dla eventu body onload.
np tak:


<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Htnl 5 test</title>
<script type="text/javascript">
var test = function(){
var hello = document.getElementById("hello");
hello.firstChild.nodeValue = "blabla";
}
</script>
<body onload="javascript:test();">
<p id="hello">
Witaj świecie!!
</p>
</body>
</html>


Edit: ha, piotr mnie uprzedził ;-)

Ale masz wartość dodaną w postaci snippet'u :)

konto usunięte

Temat: error javascript

to trzeba takiego onload'a zapodać? Kurde ja sądziłem, że jak załączymy od razu taki plik to DOM jest widoczny. Podobnie chyba jest z jQuery możemy selektorami się dobrać do elementów po zaladowaniu biblioteki czy ja się mylę? sorki jestem świeżakiem dość w tym temacie i takie niuanse strasznie mnie irytują. Generalnie w pracy jak coś tam takiego robie to nie muszę jakichś onloadów robić no chyba, że w naszym systemie gdzieś to jest zapodane w asp.netowej funkcji OnLoad. Będę musiał to sprawdzić.

EDIT:

działą dzięki, a jak chcę dodać to w zewnętrznym pliku to jak mniemam też powinienem podać ściężkę do niego poniżej tego czego szukam? To jak to się ogarnia kiedy dodaje się te wszystkie pliki przed sekcją body. Widziałem jak np. pliki jquery są dodawane w sekcji head i tam w jakichś tutorialach podobnieRafał K. edytował(a) ten post dnia 27.04.13 o godzinie 12:29
Dominik Mikiewicz

Dominik Mikiewicz maps made easy,
www.cartomatic.pl ||
cartoninjas.net

Temat: error javascript

dom jest widoczny, w końcu getElement Ci przeszedł. Tyle że nie znalazł tego, czego szukałeś ;-)
Zasadniczo czekasz, aż dokument jet ready i dopiero potem napierasz.

Temat: error javascript

Rafał K.:
to trzeba takiego onload'a zapodać? Kurde ja sądziłem, że jak załączymy od razu taki plik to DOM jest widoczny. Podobnie chyba jest z jQuery możemy selektorami się dobrać do elementów po zaladowaniu biblioteki czy ja się mylę? sorki jestem świeżakiem dość w tym temacie i takie niuanse strasznie mnie irytują. Generalnie w pracy jak coś tam takiego robie to nie muszę jakichś onloadów robić no chyba, że w naszym systemie gdzieś to jest zapodane w asp.netowej funkcji OnLoad. Będę musiał to sprawdzić.

EDIT:

działą dzięki, a jak chcę dodać to w zewnętrznym pliku to jak mniemam też powinienem podać ściężkę do niego poniżej tego czego szukam? To jak to się ogarnia kiedy dodaje się te wszystkie pliki przed sekcją body. Widziałem jak np. pliki jquery są dodawane w sekcji head i tam w jakichś tutorialach podobnie

Ok to może od podstaw bo widzę, że trzeba troszkę porządku wprowadzić.

Reprezentacja DOM jest tworzona w trakcie parsowania dokumentu ale nie jest ona na starcie kompletna bo plik html jest parsowany liniowo z góry na dół. Jeżeli przeglądarka trafi na skrypt to zwyczajnie stara się go wykonać. Nie ma przy tym znaczenia czy jest to skrypt in-line czy z osobnego pliku. Jeżeli taki skrypt pojawi się w nagłówku dokumentu to masz dostęp tylko do obiektów window i dokument ale dokument posiada tylko elementy, które już zostały przeparsowane. Jeśli umieścić ten skrypt zaraz przed znacznikiem zamykającym </body> to masz w zasadzie dostęp już do pełnej reprezentacji dokumentu.

Nawet w jQuery kod umieszcza się jako wywołanie eventu onReady() - http://learn.jquery.com/using-jquery-core/document-ready/

Oczywiście nie ma takiego obowiązku ale efekt będziesz miał jak wyżej - czyli gdzie sobie skrypt wstawisz tam się wykona.

Jak wejdziesz głębiej w jQuery i wywołania asynchroniczne to też na początku natkniesz się na podobną sytuację (np. nie wszystkie wiersze tabeli - jeśli będzie odpowiednio duża - ci się pokolorują). Z podobnego powodu jak wyżej.Piotr Rusoł edytował(a) ten post dnia 27.04.13 o godzinie 13:12
Adrian Kaczmarek

Adrian Kaczmarek To czy człowiek jest
in­te­ligen­tny
poz­na­je się po
je­...

Temat: error javascript

Do nauki polecam: http://jsfiddle.net/

konto usunięte

Temat: error javascript

Piotr R.:
Rafał K.:
to trzeba takiego onload'a zapodać? Kurde ja sądziłem, że jak załączymy od razu taki plik to DOM jest widoczny. Podobnie chyba jest z jQuery możemy selektorami się dobrać do elementów po zaladowaniu biblioteki czy ja się mylę? sorki jestem świeżakiem dość w tym temacie i takie niuanse strasznie mnie irytują. Generalnie w pracy jak coś tam takiego robie to nie muszę jakichś onloadów robić no chyba, że w naszym systemie gdzieś to jest zapodane w asp.netowej funkcji OnLoad. Będę musiał to sprawdzić.

EDIT:

działą dzięki, a jak chcę dodać to w zewnętrznym pliku to jak mniemam też powinienem podać ściężkę do niego poniżej tego czego szukam? To jak to się ogarnia kiedy dodaje się te wszystkie pliki przed sekcją body. Widziałem jak np. pliki jquery są dodawane w sekcji head i tam w jakichś tutorialach podobnie

Ok to może od podstaw bo widzę, że trzeba troszkę porządku wprowadzić.

Reprezentacja DOM jest tworzona w trakcie parsowania dokumentu ale nie jest ona na starcie kompletna bo plik html jest parsowany liniowo z góry na dół. Jeżeli przeglądarka trafi na skrypt to zwyczajnie stara się go wykonać. Nie ma przy tym znaczenia czy jest to skrypt in-line czy z osobnego pliku. Jeżeli taki skrypt pojawi się w nagłówku dokumentu to masz dostęp tylko do obiektów window i dokument ale dokument posiada tylko elementy, które już zostały przeparsowane. Jeśli umieścić ten skrypt zaraz przed znacznikiem zamykającym </body> to masz w zasadzie dostęp już do pełnej reprezentacji dokumentu.

Nawet w jQuery kod umieszcza się jako wywołanie eventu onReady() - http://learn.jquery.com/using-jquery-core/document-ready/

Oczywiście nie ma takiego obowiązku ale efekt będziesz miał jak wyżej - czyli gdzie sobie skrypt wstawisz tam się wykona.

Jak wejdziesz głębiej w jQuery i wywołania asynchroniczne to też na początku natkniesz się na podobną sytuację (np. nie wszystkie wiersze tabeli - jeśli będzie odpowiednio duża - ci się pokolorują). Z podobnego powodu jak wyżej.

dzięuję za wyjaśnienie :) a za pomoc dziękuję wszystkim :)

Następna dyskusja:

C# i error 503 przy laczeni...




Wyślij zaproszenie do