2012-02-17 13 views
7

Usando jQuery 1.7.1, intento crear un controlador de eventos para el evento de cambio en un menú desplegable. El menú desplegable se agrega dinámicamente al DOM. Parece funcionar bien en la mayoría de los navegadores, pero oh, ese cursi IE8 quiere ser difícil. ¿Hay alguna solución? ¿Debería funcionar? Estoy leyendo mucho aquí y en otros lugares, y la información parece ser contradictoria en muchos casos, y las soluciones propuestas que he encontrado/probado no me han funcionado.jQuery on() cambio en IE8

¿Alguien puede aclarar si esto debería funcionar en IE8 para .state-seletor desplegables que se crean sobre la marcha?

$(document).on('change', '.state-selector', function(e) { 
    e.preventDefault(); 
    alert('ON()'); 
}); 

Voy a seguir hurgando, pero si alguien puede aclarar esto antes de que pierda mi mente, lo agradecería.

Gracias.

ACTUALIZACIÓN

En @ petición de Wertisdk a continuación, aquí es mi desplegable fragmento:

<select name="data[Contractor][service_area_state]" class="state-selector"> 
    <option value="">Select a state...</option> 
    <option value="AK">Alaska</option> 
    <option value="AL">Alabama</option> 
    ... 
    <option value="WI">Wisconsin</option> 
    <option value="WV">West Virginia</option> 
    <option value="WY">Wyoming</option> 
</select> 

ACTUALIZACIÓN 2

A punto de @ mblase75, tal vez el método utilizado para generar la dinámica la lista desplegable importa Básicamente, estoy clonando un nodo DOM existente y vaciando el valor que se seleccionó allí. Cabe señalar que el .additionalink a también se genera dinámicamente. Al hacer clic en un .addtionallink a, la plantilla se va a clonar incluye un nuevo nodo .addtionallink a:

$(document).on('click', '.additionallink a', function(e) { 
    e.preventDefault(); 

    var copy = $(this).closest('.template').clone(); 

    // Massage the template copy's content and insert it 
    // - Clear the value selected in the original dropdown 
    // - Clear the list of counties loaded based on the original dropdown selection 
    $('.state-selector', copy).val($('.state-selector option:first', copy).val()); 
    $('.counties', copy).empty(); 
    $(this).closest('.template').after(copy); 
}); 

ACTUALIZACIÓN 3

Aquí hay una JSFiddle similares. Es casi mi código, pero hay una diferencia clave que puede ser toda la diferencia. Este violín usa .append() para insertar contenido nuevo según la selección de estado. Mi código usa el método .load(). De lo contrario, es todo lo mismo.

+0

Se puede publicar un fragmento del HTML, el jQuery va a ¿interactuar con? Puede ser específico del elemento html al que se dirige. – Wertisdk

+0

Espero esta respuesta. Tengo el mismo problema. –

+0

@Wertisdk, he actualizado mi pregunta anterior. No estoy seguro de lo útil que es, pero pregunte y recibirá (a veces). :-) –

Respuesta

1

creo que la palabra mágica aquí es .clone(), puede que esté ejecutando en este error que ya ha sido fijado en el 1.7.2 beta: http://bugs.jquery.com/ticket/11076

+0

El ticket no indica que sea específico de IE8, que es definitivamente lo que estoy viendo. ¿Me he perdido algo? –

+0

Pruebe su código con http://code.jquery.com/jquery-git.js y vea si funciona. –

+0

Yessuh, seguramente parece que sí. Extraño que el error IE8 específico (al menos para mí). Haré un poco más de prueba, pero los primeros signos son buenos. –