2011-12-28 21 views
5

¿Puede alguien decirme dónde está el error, simplemente no puedo verlo? 'e1 ha cambiado' debe registrarse en la consola cuando la selección cambie.jquery no reacciona al seleccionar/opción cambiar evento

html:

<select name="e1" id="e1"> 
    <option value="1">1</option> 
    <option value="2">2</option> 
</select> 

JS:

$('#e1').change(function() { 
    console.log('e1 has changed'); 
}); 

jQuery es definitivamente trabajando desde que estoy con éxito "obtener" datos del servidor para otros elementos.

+0

El código parece correcto. ¿Puede elaborar exactamente lo que no funciona, o tal vez dar un caso de uso donde este código no funciona? – Tejs

+0

El código es correcto, el problema no está allí. ¿Puedes explicar más? – Flater

+1

Su código funciona (cambió el archivo console.log a una alerta para hacer la vida más fácil aquí). Http://jsfiddle.net/NJskv/ – ridecar2

Respuesta

10

Este código

$('#e1').change(function() { 
    console.log('e1 has changed'); 
}); 

es probable que no esté en su documento manejador de lista, y por lo tanto se ejecuta antes de que su elemento DOM e1 está listo. Se puede crear un alimentador de documentos listos, que se ejecuta cuando sus elementos DOM están listos, como este

$(function() { 
    $('#e1').change(function() { 
     console.log('e1 has changed'); 
    });  
}); 
+2

+1 para la explicación de * why * debe estar en un manejador listo para documentos. – Fenton

1

Funciona para mí. Aquí está el código jsFiddle -

http://jsfiddle.net/CC5P6/

$(document).ready(function() { 
    $('#e1').change(function() { 
    alert('e1 has changed'); 
    }); 
}); 
+0

Gracias, todos tienen razón, por supuesto. – eriq

1

que no lo ha hecho ya que debe envolver el código en el $(document).ready(:

$(document).ready(function() { 
    $('#e1').change(function() { 
     console.log('e1 has changed'); 
    }); 
}); 
0

Esto es trabajo para mí:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
<html> 
<head> 
<script src="http://code.jquery.com/jquery-latest.js"></script> 
<script> 
    $(function() { 
     $('#e1').change(function() { 
      console.log('e1 has changed'); 
     }); 
    }); 
</script> 

</head> 
<body> 
<select name="e1" id="e1"> 
    <option value="1">1</option> 
    <option value="2">2</option> 
</select> 
</body> 
</html> 

document.ready es la clave aquí, como otros han señalado.

0

Para menús de selección, el evento de cambio se produce cuando se selecciona una opción por los eventos Teclado y Botones de mouse y NoScript interviene de manera efectiva. Para campos de texto o áreas de texto, el evento de cambio ocurre cuando el campo pierde el foco. por lo tanto no se puede utilizar el "cambio evento" directamente (sin seleccionar cualquier opción de teclado o el ratón) probar este bacalao:

<select name="subpos" id="subpos"> 
<option value="examplel">examplel</option> 
<option value="sample">sample</option> 
<option value="fortest">fortest</option> 
</select> 


<script> 
    $(function() { 
     $('#subpos').change(function() { 
      console.log('subpos has changed'); 
     }); 
     $("#subpos").val('sample');//combo box has change but dont appear in console log. why? 
    }); 
</script> 

después del rodaje; ver el registro de la consola no se puede ver 'subpos ha cambiado' en el registro de la consola. pero en acción 'subpos ha cambiado' ¿Qué ha pasado? debe registrarse en la consola cuando la selección cambie. ahora al seleccionar esa opción del menú desplegable, puede ver que el registro de cosole es

Cuestiones relacionadas