Istnieje kilka sposobów obsługi zdarzeń za pomocą HTML / DOM. Nie ma żadnego dobrego lub złego sposobu, ale różne sposoby są przydatne w różnych sytuacjach.
1: Jest to zdefiniowane w HTML:
<input id="clickMe" type="button" value="clickme" onclick="doFunction();" />
2: Dodanie go do właściwości DOM dla zdarzenia w JavaScript:
//- Using a function pointer:
document.getElementById("clickMe").onclick = doFunction;
//- Using an anonymous function:
document.getElementById("clickMe").onclick = function () { alert('hello!'); };
3: I jest dołączenie funkcji do procedury obsługi zdarzeń za pomocą Javascript:
var el = document.getElementById("clickMe");
if (el.addEventListener)
el.addEventListener("click", doFunction, false);
else if (el.attachEvent)
el.attachEvent('onclick', doFunction);
Zarówno druga, jak i trzecia metoda pozwalają na funkcje wbudowane / anonimowe i obie muszą zostać zadeklarowane po przeanalizowaniu elementu z dokumentu. Pierwsza metoda nie jest poprawnym XHTML, ponieważ atrybutu onclick nie ma w specyfikacji XHTML.
Pierwsza i druga metoda wzajemnie się wykluczają, co oznacza, że użycie jednej (drugiej) zastąpi drugą (pierwszą). Trzecia metoda umożliwia dołączenie dowolnej liczby funkcji do tej samej procedury obsługi zdarzeń, nawet jeśli pierwsza lub druga metoda również została użyta.
Najprawdopodobniej problem leży gdzieś w twojej CapacityChart()
funkcji. Po odwiedzeniu linku i uruchomieniu skryptu uruchamia się funkcja CapacityChart () i otwierają się dwa wyskakujące okienka (jedno jest zamknięte zgodnie ze skryptem). Gdzie masz następujący wiersz:
CapacityWindow.document.write(s);
Zamiast tego spróbuj wykonać następujące czynności:
CapacityWindow.document.open("text/html");
CapacityWindow.document.write(s);
CapacityWindow.document.close();
EDYCJA
Kiedy zobaczyłem twój kod, myślałem, że piszesz go specjalnie dla IE. Jak wspominają inni trzeba będzie zastąpić odniesienia do document.all
z document.getElementById
. Jednak po tym nadal będziesz musiał naprawić skrypt, więc zaleciłbym uruchomienie go przynajmniej w IE, ponieważ wszelkie błędy, które popełnisz, zmieniając kod do działania w różnych przeglądarkach, mogą spowodować jeszcze więcej zamieszania. Gdy będzie działał w IE, łatwiej będzie stwierdzić, czy działa on w innych przeglądarkach podczas aktualizacji kodu.