2011-12-23 12 views
15

Mam następujące.Wywołanie funkcji javascript wewnątrz znacznika HTML

<a href="#" onclick="hello()">click me</a> 

i mam plik JavaScript

$(document).ready(function() { 
    function hello() { 
    alert('hi'); 
    } 
}); 

Ale gdy klikam na "kliknij mnie", alarm nie jest zwolniony. Mówi "cześć" nie jest zdefiniowany. Usuwam document.ready i działa.

Czy to dlatego, że "cześć" nie jest zdefiniowana, dopóki cały dokument nie jest gotowy, ale kiedy powyższy znacznik "kotwica" jest renderowany, nie może znaleźć funkcji?

Czy mogę to naprawić?

  • Muszę zadzwonić do funkcji JavaScript z tagu html poprzez brzydki „onclick”
  • muszę zachowywać moje JS wewnątrz document.ready (istnieją inne części muszę)

Odpowiedz

15

Twój hello() deklaracja funkcji nie znajduje się w zasięgu globalnym, więc wywołanie z kodu HTML, który próbuje wywołać ją w zasięgu globalnym, nie może jej znaleźć. można albo go naprawić, przenosząc swoją funkcję hello() w zakresie globalnym:

function hello() { 
    alert('hi'); 
} 

$(document).ready(function() { 
}); 

lub poprzez uznanie go w zakresie globalnym:

$(document).ready(function() { 
    window.hello = function() { 
    alert('hi'); 
    } 
}); 
2

jest niezdefiniowana Powodem cześć dlatego Hello() istnieje tylko w kontekście wywołania zwrotnego DomReady. Musisz zdefiniować Hello() w kontekście globalnym.

1
  1. Usuń "hello()" z wywołania zwrotnego $ (document) .ready().
  2. Wywołanie "hello()" w wywołaniu zwrotnym zdarzenia "kliknięcie".
<a href="#" id="say_hello">click me</a> 

<script type="text/javascript"> 
$(document).ready(function() { 
    $('#say_hello').click(function() { 
     hello(); 
    }); 
}); 

function hello() { 
    alert('hi'); 
} 
</script> 
+0

Nie należy używać inline JS w pierwszym miejsce. Wszystko, co wymienili powyżej, jest poprawne. –

+0

-1 bez wyjaśnienia, tylko kod. –

+1

Dziękuję @HarryJoy. Teraz wiem. –

16

Można również użyć HREF atrybut z javascript: słów kluczowych w Anchor Tag wywołać funkcję JavaScript:

<a href="javascript:hello()">click me</a> 
+2

To jest rzeczywiście interesujące i twórcze rozwiązanie tego problemu. – ChaseMoskal

Powiązane problemy