2012-09-27 19 views
7

To musi być coś prostego. Przeszukałem Internet i tylko znalazłem błędy składniowe jako przyczynę tego problemu, ale nie mogę znaleźć błędu składni.Funkcja onChange nie jest zdefiniowana

Oto javascript:

<script type="text/javascript" src="http://localhost/acrilart/javascript/jquery-1.6.4.min.js"></script> 
<script type="text/javascript"> 
    $(document).ready(function(){ 
     function hi(){ 
      alert('hi'); 
     } 
     hi(); 
    }); 
</script> 

I HTML:

<input type="text" name="cep" value="" id="cep" class="required cep field" 
     onChange="hi()" /> 

Na pageload funkcja hi nazywa się zgodnie z oczekiwaniami, ale mój onChange zdarzenie powoduje błąd Firebug, mówiąc, że funkcja nie jest określone. Naprawdę jestem zakłopotany. Czy źle zrozumiałem "cześć"?

+0

spróbować skorzystać ';' wewnątrz funkcji jednej liniowej ponieważ interpreter musi wiedzieć gdzie wszystko się kończy. –

+0

Dziękuję za odpowiedź, ale po przetestowaniu okazało się, że działa z średnikiem i bez niego. –

Odpowiedz

14

Funkcja hi znajduje się wyłącznie w zakresie wewnątrz obsługi zdarzeń ready. Poruszać się na zewnątrz obsługi zdarzeń lub uchwyt wiązania wewnątrz istnieje (i usunąć inline atrybut obsługi zdarzeń z znaczników)

$(document).ready(function(){ 
    function hi(){ 
     alert('hi'); 
    } 
    $("#cep").on("change", hi); 
}); 
+0

Świetna odpowiedź. Dzięki! Znalezienie tego zajęło mi 32 lata. –

4

Funkcja hi jest zdefiniowany tylko w bloku ready. Na zewnątrz już nie istnieje.

Nie musisz zawijać definicji funkcji w .ready(), więc po prostu ją usuń. Alternatywnie, zdefiniować funkcję tak:

window.hi = function() {...} 
1

W swoim bloku kodu:

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

hi nie jest funkcją globalną. Możesz uzyskać do niego dostęp tylko w zasięgu swojego function(){...}, a nie z zewnątrz.

Ponieważ używasz jQuery, możesz zmienić sposób wiązania swojej funkcji z wydarzeniem onChange. Zamiast nazywając go ze znacznikiem html, można napisać:

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

     $('#cep').on('change', function(){ hi(); }); 
    }); 
</script> 
1

onchange jest wyzwalany tylko wtedy, gdy kontrola jest zamazany. Zamiast tego spróbuj onkeypress.

$("#cep").on("change", function() { 
    alert(1); 
}); 

lub

<input type="text" name="cep" value="" id="cep" class="required cep field" 
onkeypress="hi()" /> 

Użyj następujących zdarzeń zamiast onchange:

- onkeyup(event) 
- onkeydown(event) 
- onkeypress(event) 
2
<script src="http://code.jquery.com/jquery-latest.js"></script> 

<script type="text/javascript"> 
function hi(){ 
    alert('hi'); 
} 
</script> 

<input type="text" name="cep" value="" id="cep" class="required cep field" onKeyPress="javascript:hi();" /> 
Powiązane problemy