Aplikacja działa w Google Chrome natomiast w innych przeglądarkach nie

0

Witam,
Mam prostą aplikację z użyciem HTML, JS i JQuery, w przeglądarce Google Chrome wszystko chodzi ładnie:

screen.png

Natomiast w innych przeglądarkach nic nie działa i wszystko się sypie... Po odpaleniu np. w Firefox wyskakuje błąd: TypeError: a is null.

Tylko, że ja nawet żadnej zmiennej "a" w tym programie nie mam... Mam sobie np. funkcję render(), którą wywołuje na początku i już od razu mi cos w niej krzyczy... a w Google Chrome wszystko śmiga elegancko, poza tym w JSBin i JSFiddle też nie działa.

Funkcja render wygląda na przykład tak:

function render(){
	var result = ""
	var tableHeader = "<table><tr><th>LP</th><th>NAZWA</th><th>ILOŚĆ</th><th>CENA</th><th>SUMA</th></tr>";
	result += tableHeader;
	var suma_razem_za_wszystko = 0.00;
	$.each(dane, function(i, e){
		result += "<tr>"
		result += "<td>" + e.lp + "</td>"
		result += "<td>" + e.nazwa + "</td>"
		result += "<td>" + e.ilosc + "</td>"
		result += "<td>" + e.cena + "</td>"
		result += "<td>" + Math.round((e.ilosc*e.cena)* 100) / 100 + "</td>"
		result += "<td><button class='del'>Usun</button></td>"
		result += "<td><button class='edit'>Edytuj</button></td>"
		result += "<td><button class='gora'>Przesuń w góre</button></td>";
		result += "<td><button class='dol'>Przesuń w dół</button></td>";
		result += "</tr>" 
		suma_razem_za_wszystko += Math.round((e.ilosc*e.cena)* 100) / 100;
	})
	var tableFooter = "<tr><td>RAZEM:</td><td>" + suma_razem_za_wszystko.toFixed(2) + "</td></tr></table>";
	result += tableFooter;
	$("#myTable").html(result);
};
render();

W pliku html normalnie dodaje w head:

<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script>
<script type="text/javascript" src="main.js"></script>

Z tego co czytałem teraz sporo to coś zrozumiałem, że chodzi o to, że nie zostało coś załadowane jeszcze? Nie rozumiem o co chodzi i jak to rozwiązać, ktoś pomoże?

1

Daj no linka do całości z JSFiddle lub/i JSBin

0

Mogę jeszcze dodać:
title
Tu ewidentnie chodzi o tą funkcję render i each w niej zawarte...
w html w body mam dodane:

<body onload="render()">

Chyba chodzi o to, że funkcja sie wykonuje, a jeszcze nie wszystko jest gotowe czy coś ;/

1

nic to nie daje, pokaż całość inaczej nic sie nie da zrobić

1

Tylko, że ja nawet żadnej zmiennej "a" w tym programie nie mam...

jak sam napisałeś, ta zmienna jest pewnie w jQuerowej funkcji each. Zapewne jest to zminimalizowany kod (stąd nazwa zmiennej a). Czyli, jak sam napisałeś, w funkcji each jest używana jakaś zmienna a i jest ona null. Ponieważ jQuery jest przypuszczalnie dobrze testowane, to można bezpiecznie założyć, że prawdopodobnie nie jest to bug w jQuery, tylko winę ponosi twój kod i to, co do jQuery przekazujesz. Czyli przekazujesz jakąś zmienną, która ma wartość null. Innymi słowy: sprawdź czy podajesz prawidłowe argumenty do funkcji each, która ma taką dokumentację ( http://api.jquery.com/jquery.each/ ).

Takie pytanie - skąd bierzesz zmienną dane? Może ona jest równa null? (możesz użyć console.log, a potem sprawdzić w konsoli błedów w przeglądarce - w ogóle polecam używać console.log bo to potężne narzędzie. Albo debuggera. Na jedno wychodzi (kwestia gustu, niektórzy hejtują console.log i rozwiązują wszystko debuggerem, whatever works...).

console.log("DANE:", dane);  // <- logowanie zmiennej
$.each(dane, function(i, e){ 
....... KOD KTÓRY JUŻ MASZ....

Oczywiście nie wiem na ile te moje dedukcje i przypuszczenia mają sens (bo nie wstawiłeś całego kodu, ani odtworzonego przypadku na jakimś jsfiddle, więc to tylko wróżenie z fusów teraz), tym niemniej takie problemy da się zwykle rozwiązać, po prostu trzeba podążać po nitce do kłębka (swoją drogą tam ci się wyświetliło Więcej informacji, kliknąłeś w to w ogóle?).

Inna sprawa, że w Chrome ci działa podobno, więc też możliwe, że problem leży gdzie indziej zupełnie (ale mówię, to wróżenie z fusów).

Jeszcze inna sprawa, że funkcja $.each przypuszczalnie do niczego ci nie potrzebna już, ponieważ już jakiś czas temu weszła do JS nowość (wraz z ES5, czyli kilka lat temu już), czyli teraz każda tablica ma natywną metodę forEach .

0
Blue_Carpet napisał(a):

w html w body mam dodane:

<body onload="render()">

Chyba chodzi o to, że funkcja sie wykonuje, a jeszcze nie wszystko jest gotowe czy coś ;/

Gdy używamy biblioteki jQuery, aby zagwarantować sobie wczytanie kodu HTML przed uruchomieniem skryptu używamy konstrukcji:

<script type="text/javascript">
$(document).ready( function(){
   // ....
});
</script>

1 użytkowników online, w tym zalogowanych: 0, gości: 1