2011-07-15 23 views
61

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 haga clic en Enviar, para asegurarse de que no hay espacios en blanco, el código es el siguiente:JQuery - Obtener el valor seleccionado

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 quiero. Como puede ver, lo he intentado:

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

que no parece funcionar.

Si pongo la siguiente declaración de alerta: alerta (obj.options [obj.selectedIndex] .text); después del caso "select-one", se emite el valor correcto, así sé que se pasó correctamente.

No estoy seguro de cómo capturarlo en la función sendDetailsDancer.

Cualquier ayuda apreciada.

Regards, Stephen

Respuesta

104

var nationality = $("#dancerCountry").val(); debería funcionar. ¿Estás seguro de que el selector de elementos funciona correctamente? Tal vez debería probar:

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

Gracias Ben, var nacionalidad = $ ('select [name =" dancerCountry "]'). Val() trabajó un lujo. – Stephen

+0

Me alegro de poder ayudar @Stephen! – BenM

48

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

Dado que en realidad se desea que el texto interno <option> del elemento seleccionado, que debe coincidir con ese elemento y utilizar en su lugar text():

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

Esto era servicial cuando necesitaba texto para la pantalla y permite tomar atributo de valor para la validación mediante el uso de # ("opción de Identificación: seleccionado"). Val() – PRASANTH

+1

1 de opción ': seleccionado ' –

Cuestiones relacionadas