55 votos

JQuery - Get seleccione un valor

Estoy tratando de obtener el valor seleccionado de una lista desplegable a través de jQuery. Tengo un poco de javascript que valida un formulario cuando hago clic en el botón ENVIAR, para asegurarse de que no hay espacios en blanco, el código es el siguiente:

function formCheckDancer(formobj){                  
            // Enter name of mandatory fields
            var fieldRequired = Array("dancerStageName", "dancerFullName", "dancerPhone", "dancerEmail", "dancerCountry", "dancerAvailableDate");

            // Enter field description to appear in the dialog box
            var fieldDescription = Array("Stage Name", "Full Name", "Phone Number", "Email Address", "Nationality", "Availability");

            // dialog message
            var alertMsg = "Please complete the following fields:\n";           
            var l_Msg = alertMsg.length;

            for (var i = 0; i < fieldRequired.length; i++){
                var obj = formobj.elements[fieldRequired[i]];               
                if (obj){
                    switch(obj.type){
                    case "select-one":                      
                        if (obj.selectedIndex == -1 || obj.options[obj.selectedIndex].text == "" || obj.options[obj.selectedIndex].text == "..."){
                            alertMsg += " - " + fieldDescription[i] + "\n";
                        }
                        break;
                    case "select-multiple":
                        if (obj.selectedIndex == -1){
                            alertMsg += " - " + fieldDescription[i] + "\n";
                        }
                        break;
                    case "text":
                    case "textarea":
                        if (obj.value == "" || obj.value == null){
                            alertMsg += " - " + fieldDescription[i] + "\n";
                        }
                        break;
                    case "checkbox":
                        if (obj.checked == false){                  
                            alertMsg += " - " + fieldDescription[i] + "\n";
                        }
                        break;
                    default:
                    }
                    if (obj.type == undefined){
                        var blnchecked = false;
                        for (var j = 0; j < obj.length; j++){
                            if (obj[j].checked){
                                blnchecked = true;
                            }
                        }
                        if (!blnchecked){
                            alertMsg += " - " + fieldDescription[i] + "\n";
                        }
                    }
                }
            }

            if (alertMsg.length == l_Msg){
                return sendDetailsDancer(); //Send email if all field are populated.
                return true;                
            }else{
                alert(alertMsg);
                return false;
            }
        }

        function sendDetailsDancer(){                       
            var stagename = $("input[name=dancerStageName]").val();         
            var fullname = $("input[name=dancerFullName]").val();
            var phone = $("input[name=dancerPhone]").val();
            var email = $("input[name=dancerEmail]").val();                                                                                             
            var nationality = $("#dancerCountry").val();            
            var availability = $("input[name=dancerAvailableDate]").val();    

            $("#contact_form_result_dancer").html('<center><img src="loading.gif" width="32" height="32" /></center>');
            $("#contact_form_result_dancer").show();
            $.post("http://localhost/lapello/wp-content/themes/lapello/sendMailDancer.php", {stagename: stagename, fullname: fullname, phone: phone, email: email, nationality: nationality, availability: availability}, function (data){
                $("#contact_form_result_dancer").html(data);            
            });
            setTimeout("contactReturnDancer()", 4000);
            return false;
        }

En este caso, la Nacionalidad es el valor que yo quiero. Como se puede ver, he probado con:

var nationality = $("#dancerCountry").val();

lo que no parece funcionar.

Si pongo la siguiente declaración de alerta: alerta(obj.opciones[obj.selectedIndex].de texto); después de que el caso de "seleccionar" el valor correcto es de salida, así que yo sé lo que se pasa correctamente.

No estoy seguro de cómo se captura en el sendDetailsDancer función.

Cualquier ayuda es apreciada.

Saludos, Stephen

94voto

BenM Puntos 23070

var nationality = $("#dancerCountry").val(); debería funcionar. ¿Estás seguro de que el elemento selector está funcionando correctamente? Quizás debería intentar:

var nationality = $('select[name="dancerCountry"]').val()

45voto

Frédéric Hamidi Puntos 123646

val() devuelve el valor de la <select> elemento, es decir, el value atributo seleccionado de la <option> elemento.

Puesto que usted realmente desea el interior del texto seleccionado de la <option> elemento, debe coincidir con ese elemento y el uso de texto() en su lugar:

var nationality = $("#dancerCountry option:selected").text();

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X