2013-02-16 15 views
5

muszę funkcję ładowania, aby uzyskać dane z JS zewnętrznych zawarte w pliku HTML, a ja robię tak:Jak wywołać funkcję zewnętrzną wewnątrz kodu jquery z html?

<body onLoad="getTicket();"> 
...... 
</body> 

lub to:

<html> 
<body> 
    <head> 
    <script src="js/jquery.js" type="text/javascript"></script> 
    <script src="js/functions.js" type="text/javascript"></script> 
    <script> 
     $(document).ready(function() { 
      getTicket(); 
     }); 
    <script> 
    </head> 
<body> 
</html> 

lub to:

<html> 
<body> 
    <head> 
    <script src="js/jquery.js" type="text/javascript"></script> 
    <script src="js/functions.js" type="text/javascript"></script> 
    <script> 
     getTicket(); 
    <script> 
    </head> 
<body> 
</html> 

Mam to w funkcjach. JS:

functioOne() { 

} 

functionTwo() { 

} 

$(document).ready(function() { 
    ... 
    ..... 
    function getTicket() { 
     //to do 
    } 
}); 

Ale does'nt pracy i na wyświetlaczu konsoli to:

Uncaught ReferenceError: getTicket is not defined 

Pozdrawiam.

+0

w jaki sposób dołączasz ten zewnętrzny plik js do tego pliku HTTML? – yogi

+0

Jaką przeglądarkę używasz? Czy powoduje błędy w konsoli? Jeśli w pliku functions.js wystąpił błąd parsowania, przeglądarka może "pomijać" resztę pliku, powodując, że twoja funkcja getTicket() nie jest zdefiniowana – thaJeztah

Odpowiedz

9

Twoja funkcja getTicket jest zdefiniowana tylko w kontekście (zasięgu) zamknięcia jQuery (funkcja anonimowa). Zdefiniuj go w globalnym zasięgu (w innym miejscu pliku, a nie jako "parametr funkcji").

Jeśli potrzebujesz zmiennych z tego zakresu, zamknij je w przestrzeni nazw (obiekt) lub zadeklaruj jako window.getTicket = function() { /* ... */}.

0

Dodaj <script type="text/javascript src="external.js"></script> do head.

Następnie należy poczekać, aż dokument zostanie w pełni załadowany.

Problem polega na tym, że kod zostanie wykonany w ten sposób:

  • wykonania external.js
  • czynność nie jest zdefiniowana, ponieważ dokument nie zakończył ładowanie
  • wywołać funkcję niezdefiniowanej
  • dokument jest gotowy

IMHO Nie uważam, że dobrym pomysłem jest zdefiniowanie funkcji w $ (dokument) .ready. Łatwiej byłoby normalnie zdefiniować tę funkcję, a następnie w $ (document) .ready.

+0

Dlaczego -1 dla tej odpowiedzi? – collimarco

+0

Powiedziałem ci, gdy odpowiedź brzmiała "dodaj znacznik skryptu" (który nie miał nic wspólnego z problemem, że zakres funkcji był zamknięciem, co oznacza, że ​​nigdy go nie widział). Teraz edytowałeś to, więc jestem un-minus-oning-it. –

4

można to zrobić:

$(document).ready(function() { 
    ... 
    ..... 
    window.getTicket = function() { 
    //to do 
    } 
}); 

gdy dokument jest gotowy, będzie można zadzwonić getTicket

+0

Masz na myśli, że umieściłem ten kod w zewnętrznym js lub w pliku HTML? – SoldierCorp

+0

w pliku html. – sdepold

+0

W pliku html? Nie, jest w pliku JS do działania! – SoldierCorp

0

Musisz dołączyć plik js przed wywołaniem funkcji. Jeśli to zrobisz:

<html> 
<body> 
    <head> 
    <!-- include script files here.(jquery and custom script files) --> 
    <script> 
     $(document).ready(function() { 
      getTicket(); 
     }); 
    </script> 
    </head> 
<body> 
</html> 

musisz zawrzeć swój plik skryptu przed wywołaniem funkcji.

+0

Oczywiście, że to mam, to pierwsza rzecz, którą powinieneś zrobić. – SoldierCorp

+2

hej, nie zamknąłeś poprawnie znacznika skryptu. –

4

Spróbuj oddanie function getTicket(){} zewnątrz lub doc ready:

functio One() { 

} 

function Two() { 

} 
function getTicket() { 
    //to do 
} 

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

Twój rozkaz włączenia jest idealny żadnych problemów z tym.

<script src="js/jquery.js" type="text/javascript"></script> 
<script src="js/functions.js" type="text/javascript"></script> 

To jest w porządku.

+0

Problem polega na tym, że getTicket() zawiera kod jQuery iz tego powodu nie mogę go zgasić. – SoldierCorp

+0

Nie powinno być żadnych problemów, ale myślę, że możesz spróbować. – Jai

+0

@SoldierCorp dokument na gotowej części upewnia się, że DOM jest wypełniony przed uruchomieniem jQuery. Możesz zdefiniować kod poza nim, o ile nie jest jeszcze wywołany. (teraz, czy powinieneś, to jest inne pytanie) – DrLivingston

Powiązane problemy