2012-09-27 49 views
7

Esto tiene que ser algo simple. Busqué en Internet y solo encontré errores de sintaxis como la causa de este problema, pero no puedo encontrar un error de sintaxis.onChange función no está definida

Aquí está el 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> 

Y el HTML:

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

En pageload la función hi se llama como se esperaba, pero mi caso onChange provoca un error de Firebug, diciendo que la función no está definido. Estoy realmente perplejo. ¿Me equivoqué de "hola"?

+0

tratar de utilizar '; 'dentro de las funciones de una sola línea, porque el intérprete necesita saber donde todo termina –

+0

Gracias por su respuesta, pero después de las pruebas descubrí que funciona con y sin el punto y coma. –

Respuesta

14

La función hi está solo en el alcance dentro del controlador de eventos ready. Mover fuera del controlador de eventos, o manejar la unión dentro de allí (y quitar el atributo controlador de eventos en línea desde el marcado):

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

Gran respuesta. ¡Gracias! Me hubiera llevado 32 años darme cuenta de eso. –

4

La función hi solamente se define en el bloque de ready. Afuera, ya no existe.

No es necesario ajustar las definiciones de funciones en .ready(), simplemente elimínelas. Por otra parte, definir la función como esta:

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

En el bloque de código:

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

hi no es una función global. Puede acceder solo dentro del alcance de su function(){...}, no desde el exterior.

Dado que está utilizando jQuery, puede cambiar la forma en que vincula su función al evento onChange. En lugar de llamar desde la etiqueta HTML, se puede escribir:

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

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

onchange solamente se activa cuando se difumina el control. Pruebe onkeypress en su lugar.

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

o

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

Use siguientes eventos en lugar de 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();" /> 
Cuestiones relacionadas