Próbuję użyć przycisku HTML, aby wywołać funkcję JavaScript.
Oto kod:
<input type="button" value="Capacity Chart" onclick="CapacityChart();">
Wydaje się jednak, że nie działa poprawnie. Czy jest na to lepszy sposób?
Oto link: http://projectpath.ideapeoplesite.com/bendel/toolscalculators.html kliknij kartę pojemności w lewej dolnej części. Przycisk powinien wygenerować alert, jeśli wartości nie zostaną zmienione, i powinien wygenerować wykres, jeśli wprowadzisz wartości.
javascript
html
forrest
źródło
źródło
Odpowiedzi:
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:
2: Dodanie go do właściwości DOM dla zdarzenia w JavaScript:
3: I jest dołączenie funkcji do procedury obsługi zdarzeń za pomocą Javascript:
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:Zamiast tego spróbuj wykonać następujące czynności:
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
zdocument.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.źródło
$("#clickMe").bind('click', function () { alert('hello!'); };)
Powiedziałbym, że lepiej byłoby dodać javascript w sposób nie narzucający się ...
używając jQuery możesz zrobić coś takiego:
źródło
Twój kod HTML i sposób wywołania funkcji za pomocą przycisku wyglądają poprawnie.
Problem wydaje się być związany z
CapacityCount
funkcją. Ten błąd pojawia się w mojej konsoli w przeglądarce Firefox 3.5: „document.all is undefined” w linii 759 pliku bendelcorp.js.Edytować:
Wygląda na
document.all
to, że jest to tylko IE i jest niestandardowym sposobem uzyskiwania dostępu do DOM. Jeśli używaszdocument.getElementById()
, prawdopodobnie powinno działać. Przykład:document.getElementById("RUnits").value
zamiastdocument.all.Capacity.RUnits.value
źródło
To wygląda poprawnie. Myślę, że zdefiniowałeś swoją funkcję albo inną nazwą, albo w kontekście niewidocznym dla przycisku. Dodaj kod
źródło
Po prostu wiesz, że średnik ( ; ) nie powinien znajdować się w przycisku podczas wywoływania funkcji.
Powinien więc wyglądać tak:
onclick="CapacityChart()"
to wszystko powinno działać :)
źródło
Jednym z głównych problemów jest to, że używasz wąchania przeglądarki bez ważnego powodu:
Używam Chrome, więc
navigator.appName
nie będzieNetscape
. Czy Chrome obsługujedocument.all
? Może, ale z drugiej strony może nie. A co z innymi przeglądarkami?Wersja kodu w
Netscape
gałęzi powinna działać w dowolnej przeglądarce w drodze do Netscape Navigator 2 z 1996 roku, więc prawdopodobnie powinieneś po prostu trzymać się tego ... poza tym, że nie zadziała (lub nie ma gwarancji, że będzie działać) ), ponieważ nie określononame
atrybutu dlainput
elementów, więc nie zostaną one dodane doelements
tablicy formularza jako nazwane elementy:Albo nadaj im nazwę i użyj
elements
tablicy, albo (lepiej) użyjktóry będzie działał na wszystkich nowoczesnych przeglądarkach - nie jest konieczne rozgałęzianie. Aby być bezpiecznym, zastąp to wąchanie wersji przeglądarki większej lub równej 4, zaznaczając opcję
getElementById
wsparcia:Prawdopodobnie chcesz również zweryfikować swoje dane wejściowe; coś jak
mogłoby pomóc.
źródło
document.getElementById
i usuwanie innych rzeczy.Twój kod nie działa w tym wierszu:
próbowałem nadepnąć z firebugiem i tam się nie udaje. które powinny pomóc ci rozwiązać problem.
odwołujesz się do jquery. równie dobrze możesz użyć go we wszystkich tych funkcjach. znacznie wyczyści twój kod.
źródło
Mam kod przycisku inteligentnego wywołania zwrotnego funkcji:
źródło
PROSTA ODPOWIEDŹ:
Gdzie ID jest identyfikatorem pola wejściowego.
źródło
głupi sposób:
Powinieneś przeczytać o dyskretnym javascript i użyć metody bind frameworku, aby powiązać wywołania zwrotne ze zdarzeniami dom.
źródło
javascript:
Protokół nie jest potrzebna wonclick
przypadku. Zdarzenie onclick jest już javascript.javascript:
Protokół jest do wykonywania javascript w atrybucie href linku.