jQuery .val() no está definido en el evento onChange

function ddlList_Changed() {
    var ddlList = jQuery('select[name*="ddlList"]');
    var value = jQuery(ddlList).val();
    alert(value);
}

Lo anterior muestra una alerta que muestra 'indefinido' cada vez que se cambia la selección de la lista desplegable.

He leído en otros escenarios donde .val() no ha sido definido y las sugerencias fueron que era necesario llamar a .val() después de el documento está listo/ha sido completamente cargado, pero seguramente esto ya pasó esa etapa de todos modos y solo se activa cuando se cambia la selección.

NOTA: ddlList no es nulo, inicialmente lo selecciona sin problemas. El .val() parece ser el problema.

preguntado el 27 de julio de 12 a las 16:07

(A) ddlList ya es un objeto jQuery, no es necesario volver a pasarlo a jQuery (es equivalente a jQuery(jQuery('select[name*="ddlList"]')).val()) (b) ¿Existe tal elemento? (C) editar: ddList detectarás nunca ser nulo, ya que jQuery siempre devuelve un objeto jQuery (pero puede que no contenga ningún elemento). -

¿Cuántas selecciones tiene que contengan el nombre? ddlList? -

¿Cómo llamas a esta función? -

@FelixKling - ¿Pensé que necesitaba escribir así ya que .val() era una función jQuery? -

@Rocket: está asignado al atributo onChange en el código subyacente (C#) en PageLoad. -

3 Respuestas

Proporcione ejemplos de código (HTML relevante, código de evento de JavaScript, etc.) para que podamos ver dónde está el error. Porque no es el evento de cambio de selección o la función val() lo que está mal.

Además, probablemente no debería volver a envolver la ddlList en un objeto jQuery una y otra vez.

También tenga en cuenta que cuando se llama al controlador de eventos en un elemento, ese elemento se asigna al this variable: no es necesario encontrarlo usando un selector jQuery nuevamente.

Ejemplo de trabajo: http://jsfiddle.net/RCLjy/5/

Respondido 27 Jul 12, 16:07

Tomaré su enfoque de conectar el controlador de eventos de esa manera en lugar del código subyacente... - usuario1017882

Creo que es una buena manera de hacerlo: nunca me ha gustado la idea de mezclar el código subyacente de WebForms con el cableado de eventos de JavaScript. Especialmente cuando es tan fácil con jQuery. Avísame que tal funciono. - Anders Arpi

Sí, estoy de acuerdo, tener un código subyacente que le diga al script del lado del cliente que maneje un evento se sintió dudoso: todavía me estoy acostumbrando a lo que jQuery es capaz de hacer. Tu respuesta me ayudó aquí compañero, muchas gracias. Problema resuelto. (Lo marcaré como respuesta cuando me lo permita). - usuario1017882

$('select').change(function(){
     var ddlList = $('select option:selected').val();
     alert(ddlList);                   
});

Respondido 27 Jul 12, 17:07

http://jsfiddle.net/39hwp/

Todo lo que necesitas es:

$('select[name*="ddlList"]').change(function () {
    alert($(this).val());     
});

Respondido 27 Jul 12, 16:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.