chekboxes y radio buttons no me funcionan!

Hola:

Supongo que no te llegan porque nunca utilizas el valor de los radio dimension ni los check lugardetrabajo en el archivo JS y por ende nunca los verás en el archivo php. Cuando necesites procesar un formulario, haz esto:

jQuery(document).ready(function($) {
  $('#formulario').submit(function(e) {
    if( validarDatos() ) {
      var data = $(this).serialize(); // Así te aseguras de que todos los datos sean enviados
      $.ajax({
        data: data
       // Ya sabes como usar esto :P.
      });
    }
  });

  function validarDatos() {
    // Aquí validas los datos

    return false;
  }
});
gracias! por responder dios. A ver y como seria? por que entre que no se mucho (casi nada) y entre que hace tanto tiempo y horas que estoy investigando que ya no entiendo nada.
te súper agradezco si me dijeras como lo coloco en mi js. podrá ser? igual voy a intentar...
Lo siguiente debería funcionar:

jQuery(document).ready(function($) {
  $('#formulario').submit(function(e) {
    if( validarDatos() ) {
      var data = $(this).serialize(); // Así te aseguras de que todos los datos sean enviados

      $.ajax({
        url: 'envio.php',
        type: 'post',
        data: data,
        success: function([B]data[/B]) { // [COLOR="#FF0000"]No haces nada con data[/COLOR]
          $('.perfect2').hide();
          $('#perfecto').delay(500).fadeIn('slow');
          $('form[name=formulariotipopresupuesto]').get(0).reset();
          $('#perfecto').delay(5000).fadeOut('slow');     
        },
        error: function() {
          $('#fracaso').delay(500).fadeIn('slow');
        }
      });
    }
  });

  function validarDatos() {
    if (nombre == "") {
      $(".nombre").focus();
      return false;
    } else if(email == "" || !validacion_email.test(email)) {
      $(".email").focus();
      return false;
    } else if(telefono == ""){
      $(".telefono").focus();
      return false;
    } else if(localidad == "") {
      $(".localidad").focus();
      return false;
    } else if(consulta == ""){
      $(".consulta").focus();
      return false;
    } else if($('input[type=checkbox]:checked').length <= 0) {
      $('table.lugardetrabajo').focus();
      return false;
    } else if($('input[type=radio]:checked').length <= 0) {
      $('table.dimension').focus();
      return false;
    } else {
      $('.perfect2').removeClass('transparente');
    }

    return true;
  }
});

Por si acaso, la función error: function()..., no implica un error en el proceso de los datos, sino un error por parte del servidor (por ejemplo, que el archivo envio.php no se haya encontrado - 404 Not found). Te lo digo porque el script.php podría fallar y en el archivo js no verificas la respuesta del servidor (data - el parámetro de la función success - es la respuesta del servidor y deberías analizarla en caso de que falle el envío del mail).
Gracias genio!.. pero te juro que no me funciona. A ver.. al parecer no hace nada, o sea si de primera con todo vacio le doy clic al botón enviar debería hacerme focus en "nombre" pero no lo hace, he probado de completar el nombre y presionar de nuevo a ver si me hace focus en el siguiente que seria "email" pero tampoco. me fije y creo que el problema debería estar en la parte del clic del botón, ya que mi .js dice al pricipio de todo:
(function(){
        $(".botonenviarlo").click(function() {

Y al final del form fíjate que el botón es así:


   <button class="botonenviarlo">ENVIAR CONSULTA</button> 


Trate de poner la línea de .click(function() al principio y reemplazar la de $('#formulario').submit(function(e) {
pero tampoco lo modifica, bueno y finalmente complete todos los datos y tampoco lo envía ni muestra los mensajes ni de error ni de enviado. que será? yo me juego que tiene que ver con algo del botón por que es el botón quien da la función de hacer todo el resto. será?
Hmmm claro, porque debes darle un ID al formulario (form) y cambiar ese ID en la línea $('#formulario').submit.... El que sea un button o input no es importante a la hora de enviar el formulario, pues el navegador "entiende" que al hacer clic en un botón (excepto el input type="reset") implica que se está enviando el formulario al servidor :).
aja, bueno lo que hice fue ponerle:

<form method="post" name="formulariotipopresupuesto" id="formulario2">

y en el .js le puce:

jQuery(document).ready(function($) {
  $('#formulario2').submit(function(e) {
    if( validarDatos() ) {
      var data = $(this).serialize(); // Así te aseguras de que todos los datos sean enviados

Pero sigue igual, o sea no hace nada o no funciona , no hace focus y no envía si completo todo.

pd: no será que mi botón no tiene algo que diga que haga submit? por que lo veo medio pelado.
pd2: lo que si al darle clic resetea todo lo que puse pero nada mas es todo lo que logra hacer, pero no se si hace reset por que llega al .js y recibe lo del reset form o si lo hace por que no funciona y justo esa reacción de no funcionar resetea todo.
PD3: también he agregado type=submit al botón y no hace nada.
En ese caso, elimina el button y pon un <input type="submit" />, puesto que el atributo type="submit" para un button no existe.

Por otro lado, revisa la consola de errores (en Google Chrome, presiona F11 y vete a la pestaña Console) y publica los posibles errores en el foro :).
Bueno, estuve ocupado trabajando, me fije y en verdad sigue sin funcionar, no lo puedo creer , por que no funciona...

El botón lo deje exactamente asi:

<input name="boton" type="submit" value="Enviar" class="botonenviarlo" />   
</form>

sigue sin hacer nada, no hace focus no hace nada de nada

En la consola de chrome dice:

Uncaught ReferenceError: email is not defined
aaaaaah, fue mi error, disculpa. Lo que pasa es que, en la función validarDatos, no existen las variables de los if. Reemplaza la función validarDatos() con esta:

function validarDatos() {
var nombre = $(".nombre").val();
            email = $(".email").val();
            validacion_email = /^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$/;
            telefono = $(".telefono").val();
        localidad= $(".localidad").val();
        consulta = $(".consulta").val();
            encuesta= $(".encuesta").val();

    if (nombre == "") {
      $(".nombre").focus();
      return false;
    } else if(email == "" || !validacion_email.test(email)) {
      $(".email").focus();
      return false;
    } else if(telefono == ""){
      $(".telefono").focus();
      return false;
    } else if(localidad == "") {
      $(".localidad").focus();
      return false;
    } else if(consulta == ""){
      $(".consulta").focus();
      return false;
    } else if($('input[type=checkbox]:checked').length <= 0) {
      $('table.lugardetrabajo').focus();
      return false;
    } else if($('input[type=radio]:checked').length <= 0) {
      $('table.dimension').focus();
      return false;
    } else {
      $('.perfect2').removeClass('transparente');
    }

    return true;
  }
XD, otro error mio (estoy algo aturdido parece ¬¬). Ahora si debería funcionar XD:

jQuery(document).ready(function($) {
  $('#formulario2').submit(function(e) {
    [COLOR="#FF0000"]e.preventDefault();[/COLOR]
    if( validarDatos() ) {
      var data = $(this).serialize(); // Así te aseguras de que todos los datos sean enviados

      $.ajax({
        url: 'envio.php',
        type: 'post',
        data: data,
        success: function(data) { // No haces nada con data
          $('.perfect2').hide();
          $('#perfecto').delay(500).fadeIn('slow');
          $('form[name=formulariotipopresupuesto]').get(0).reset();
          $('#perfecto').delay(5000).fadeOut('slow');     
        },
        error: function() {
          $('#fracaso').delay(500).fadeIn('slow');
        }
      });
    }
  });

function validarDatos() {
var nombre = $(".nombre").val();
            email = $(".email").val();
            validacion_email = /^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$/;
            telefono = $(".telefono").val();
        localidad= $(".localidad").val();
        consulta = $(".consulta").val();
            encuesta= $(".encuesta").val();

    if (nombre == "") {
      $(".nombre").focus();
      return false;
    } else if(email == "" || !validacion_email.test(email)) {
      $(".email").focus();
      return false;
    } else if(telefono == ""){
      $(".telefono").focus();
      return false;
    } else if(localidad == "") {
      $(".localidad").focus();
      return false;
    } else if(consulta == ""){
      $(".consulta").focus();
      return false;
    } else if($('input[type=checkbox]:checked').length <= 0) {
      $('table.lugardetrabajo').focus();
      return false;
    } else if($('input[type=radio]:checked').length <= 0) {
      $('table.dimension').focus();
      return false;
    } else {
      $('.perfect2').removeClass('transparente');
    }

    return true;
  }
});

La línea en rojo es lo que faltaba.

Nuevamente, perdona por los errores :P.
Bueno master, no te preocupes! , gracias a vos esto ya funciona! . Si supieras lo difícil que es encontrar a alguien te te ayude y listo sin dar miles de vueltas y hacerse los super codigueros profesionales, los odio!

BUT.... SOLO QUEDA UN ERRORCITO INFITITITO... llega todo perfecto menos el campo de los chekboxes , llega la palabra: Array.

y eso seria lo ultimo supongo, en este tema... Yenius!
Si supieras lo difícil que es encontrar a alguien te te ayude y listo sin dar miles de vueltas y hacerse los super codigueros profesionales, los odio!

Yo lo entiendo, pues mi trabajo es este y, por ende, si ayudo a la gente se podría considerar como "un trabajo menos". Es como que alguien llegara y te pidiera que trabajaras gratis :P. Sin embargo, no tengo problemas con ayudar con cosas chicas (trabajos cortos que no tomen más de 30 minutos, como este) o enseñar a los que quieran aprender (después de todo, Como Crear Tu Web es un lugar para aprender, no un foro donde encontrar gente que trabaje gratis), pero no voy a hacerle el trabajo a los que pidan cosas sin tener ánimos de aprender ni nada (tu ya tenías una parte hecha) y esperan que les hagas todo el trabajo sin más (ni siquiera ofrecen algo a cambio).

Volviendo a tu problema, la palabra Array no es un error, de hecho, es el comportamiento esperado. Siempre que un elemento de formulario se llama algun_nombre[], PHP lo interpreta como un arreglo y como tal, deben ser procesados de forma distinta. Un ejemplo:

index.html
<form action="parse.php">
  <input type="checkbox" name="dias[]" value="Lunes" checked="checked" />
  <input type="checkbox" name="dias[]" value="Martes" checked="checked" />
  <input type="checkbox" name="dias[]" value="Miércoles" checked="checked" />
  <input type="checkbox" name="dias[]" value="Jueves" checked="checked" />
  <input type="submit" />
</form>

parse.php
<?php
  // Cuando un <form> no especifica el atributo method, por defecto se envían por GET
  if( isset( $_GET['dias'] ) && ! empty( $_GET['dias'] ) {
    $array = $_GET['dias'];

    foreach( $array as $indice => $valor ) {
      echo "Indice: $indice<br>Valor: $valor<br><br>";
    }
  } else {
    echo "<p>El arreglo 'dias' esta vacio o no se marco ningun checkbox</p>";
  }
?>

El resultado debería ser así (si es que al menos un checkbox se marcó):

Indice: 0
Valor: Lunes

Indice: 1
Valor: Martes

Indice: 2
Valor: Miércoles

Indice: 3
Valor: Jueves

Y si no se marca nada, entonces aparecerá el mensaje "El arreglo dias...". Prueba el código en tu servidor para que veas el resultado.
Vos te referís a que lo pruebe en el servidor para que no arroje la palabra array? , por que lo probé en mi servidor y al mail llego la palabra array justo en el campo donde iría el resultado del chekbok, que apropósito marque 2 juntos para ver si llegaban ambos.
Bueno, no termino de darme cuenta como hacer para que simplemente la palabra array no llegue y en su lugar llegue el contenido, es una pena que no pueda empezar ya a ganar dinero solo por eso.

Por otra parte estuve modificando el código , le agregue mensajes de error a cada casilla , los mismos con fadeIn y fadeOut cuando la casilla es correctamente modificada por el usuario. además permití que el campo teléfono no sea obligatorio y en este momento estoy tratando de que no solo aparezca el cartel de error si no que al aparecer también haga focus en el campo donde se encuentra el error, pero no tengo en claro como hacerlo , entiendo que con .fadeOut(); logro mostrar el cartel de error y entiendo que con .focus(); logro hacer focus, pero no tengo idea de como colocar ambos al mismo tiempo y tampoco se que pasaría si en vez de haber un solo campo con error hubiesen 2 por ejemplo , no se en donde se posicionaría el focus, en cual de los dos? supongo que en el primer error que encuentre pero no se si eso lo haría automático o es cuestión de indicárselo de alguna manera, si alguien que esta leyendo lo sabe, se lo agradezco me explique un poco.
Definitivamente el código js. me fue quedando asi:

jQuery(document).ready(function($) {
  $('#formulario2').submit(function(e) {
 e.preventDefault();
  if( validarDatos() ) {
      var data = $(this).serialize(); // Así te aseguras de que todos los datos sean enviados

      $.ajax({
        url: 'envio.php',
        type: 'post',
        data: data,
        success: function(data) { // No haces nada con data
          $('.perfect2').hide();
		  $("#mensaje8").fadeOut();
          $('#perfecto').delay(500).fadeIn('slow');
          $('form[name=formulariotipopresupuesto]').get(0).reset();
          $('#perfecto').delay(5000).fadeOut('slow');     
        },
        error: function() {
          $('#fracaso').delay(500).fadeIn('slow');
        }
      });
    }
  });

function validarDatos() {
var nombre = $(".nombre").val();
            email = $(".email").val();
            validacion_email = /^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$/;
            telefono = $(".telefono");
        localidad= $(".localidad").val();
        consulta = $(".consulta").val();
            encuesta= $(".encuesta").val();

    if (nombre == "") {
      $("#mensaje1").fadeIn();
      return false;
	}else
	  $("#mensaje1").fadeOut();
      if(email == "" || !validacion_email.test(email)) {
      $("#mensaje2").fadeIn();
      return false;
	  }else
	  $("#mensaje2").fadeOut();
      if(localidad == "") {
      $("#mensaje3").fadeIn();
      return false;
	  }else
	  $("#mensaje3").fadeOut();
      if($('input[type=checkbox]:checked').length <= 0) {
      $("#mensaje4").fadeIn();
      return false;
	  }else
	  $("#mensaje4").fadeOut();
      if($('input[type=radio]:checked').length <= 0) {
      $("#mensaje5").fadeIn();
      return false;
	  }else
	  $("#mensaje5").fadeOut();
      if(consulta == ""){
      $("#mensaje6").fadeIn();
      return false;
	  }else
	  $("#mensaje6").fadeOut();
      if(encuesta == "-Elija una respuesta..."){
      $("#mensaje8").fadeIn();
      return false;	 
      } else {
      $('.perfect2').removeClass('transparente');
    }

    return true;
  }
});

Obviamente hay mnodificaciones en el HTML del form, quedo asi:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>formu</title>
<script type="text/javascript" src="scripts/jquery-1.8.3.min.js"></script>

<style type="text/css">
.cuerpo {
	border: thin solid #69F;
	height: 600px;
	width: 650px;
}
.div-primeros-campos {
	padding-top: 5px;
	padding-bottom: 5px;
	padding-left: 5px;
}

.nombre {
}
.email {
}
.telefono {
}
.localidad {
}
.lugardetrabajo {
}
.dimension {
}
.archivos {
}
.consulta {
}
.encuesta {
}

.botonenviarlo {
	clear: right;
	float: right;
}
.perfect {
	text-align: center;
	display: block;
	background-color: #3CF;
	width: 200px;
	right: auto;
	clip: rect(auto,auto,auto,auto);
	clear: left;
	float: left;
}
.perfect2 {
	text-align: center;
	display: block;
	clear: left;
	float: left;
	background-color: #F36;
	width: 400px;
	right: auto;
	clip: rect(auto,auto,auto,auto);
}
.transparente {
	display: none;
}
.errores{
	-wedkit-box-shadow: 0 0 5px rgba(0,0,0,0.3);
	-moz-box-shadow: 0 0 5px rgba(0,0,0,0.3);
	-o-box-shadow: 0 0 5px rgba(0,0,0,0.3);
	background: red;
	box-shadow: 0 0 5px rgba(0,0,0,0.3);
	color: #fff;
        display: none;
	font-size: 13px;
	margin-top: -23px;
	width: 250px;
	text-align: center;
	position: absolute;
	padding: 5px;
	margin-left: 200px;
	font-family: "Open Sans";
}
</style>
</head>
<body>
<form method="post" name="formulariotipopresupuesto" class="cuerpo" id="formulario2">
  <div class="div-primeros-campos">
    <input name="nombre" type="text" class="nombre" id="nombre" placeholder="  *Nombre"/>
    <div id="mensaje1" class="errores">DEBE INGRESAR SU NOMBRE!</div>
  </div>
  <div class="div-primeros-campos"><input name="email" type="text" class="email" placeholder="  *E-Mail"  />
  <div id="mensaje2" class="errores">DEBE INGRESAR UN EMAIL CORRECTO!</div>
  </div> 
  <div class="div-primeros-campos"><input name="telefono" type="text" class="telefono" placeholder="   Telefono" /> </div>
  <div class="div-primeros-campos"><input name="localidad" type="text" class="localidad" placeholder="  *Localidad" />
  <div id="mensaje3" class="errores">NECESITAMOS SABER SU LOCALIDAD!</div>
  </div>
  <div>
    Indique cual sería nuestra área de trabajo:
      <br />
    Puede elegir más de una opción. <div id="mensaje4" class="errores">SELECCIONE AL MENOS UNA OPCION!!</div>
    </div>
  <div>
     <table width="633" class="lugardetrabajo">
      <tr>
        <td width="251"><label>
          <input type="checkbox" name="lugardetrabajo[]" value="Interior de una casa." />
          Interior de una casa.</label></td>
        <td width="415"><label>
          <input type="checkbox" name="lugardetrabajo[]" value="Local de comidas (Ej. Pizzería, rotisería, heladería)" />
          Local de comidas (Ej. Pizzería, rotisería, heladería)</label></td>
      </tr>
      <tr>
        <td><label>
          <input type="checkbox" name="lugardetrabajo[]" value="Exterior de una casa (Ej. jardín)." />
          Exterior de una casa (Ej. jardín).</label></td>
        <td><label>
          <input type="checkbox" name="lugardetrabajo[]" value="Un negocio (Ej. Maxi quiosco, ferretería)" />
        Un negocio (Ej. Maxi quiosco, ferretería)</label></td>
      </tr>
      <tr>
        <td><label>
          <input type="checkbox" name="lugardetrabajo[]" value="Casa y jardín completos." />
          Casa y jardín completos.</label></td>
        <td><label>
          <input type="checkbox" name="lugardetrabajo[]" value="Un salón (Ej. Iglesia, salón de fiestas)" />
        Un salón (Ej. Iglesia, salón de fiestas)</label></td>
      </tr>
      <tr>
        <td><label>
          <input type="checkbox" name="lugardetrabajo[]" value="Un techo." />
          Un techo.</label></td>
        <td><label>
          <input type="checkbox" name="lugardetrabajo[]" value="Escuela o Institución (Ej. Colegio, Jardín de infantes)" />
        Escuela o Institución (Ej. Colegio, Jardín de infantes)</label></td>
      </tr>
    </table>
  </div>
  <div>De qué tamaño aproximado considera que es el total del lugar a tratar:</div>
  <div>
  <table width="218" class="dimension">
    <tr>
      <td><label>
        <input type="radio" name="dimension" value="Grande"/>
        Grande.</label></td>
    </tr>
    <tr>
      <td><label>
        <input type="radio" name="dimension" value="Mediano"/>
        Mediano</label></td>
    </tr>
    <tr>
      <td><label>
        <input type="radio" name="dimension" value="Chico"/>
        Chico.</label></td>
    </tr>
  </table>
  <div id="mensaje5" class="errores">SELECCIONE UN TAMAÑO APROXIMADO!</div>
  </div>
  <div><textarea name="consulta" cols="" rows="" class="consulta" placeholder="  Consulta..."></textarea>
  <div id="mensaje6" class="errores">CUENTENOS SU PROBLEMA...</div>
  </div>
<div>Como conoció nuestra web?<div id="mensaje8" class="errores">POR FABOR, ELIJA UNA RESPUESTA...</div></div>
  <div><select name="encuesta" id="encuesta" class="encuesta" >
<option>-Por Facebook.</option>
    <option>-A traves de otra web.</option>
    <option>-Por revista publicitaria.</option>
    <option>-Buscando en Google</option>
    <option selected="selected">-Elija una respuesta...</option>
  </select></div>
  
  <div id="perfecto" class="perfect" style="display:none">enviado!
                </div>
      <div id="road" class="perfect2 transparente" >pensando...
      </div>  
 <input name="boton" type="submit" class="botonenviarlo" value="Enviar" />   
</form>
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script>
<script type="text/javascript" src="scripts/funcionesdos.js"></script>
</body>
</html>

Ademas si podría también alguien ayudarme con lo siguiente:

El campo Telefono, no es obligatorio, no hace una validación el .js simplemente envía el dato si es que el cliente lo llena o no lo envía si no hay nada. pero e gustaría que si el cliente no lo reyena , me llegue un mensaje qie diga: "no ha proporcionado un numero de teléfono" , ya que en la respuesta automática a mis clientes hay un texto que dice: "gracias por contactarnos etc etc , responderemos al $mail etc etc o lo llamaremos al: $teléfono, pero si no rellena el campo mejor seria que dijiera: "lo llamaremos al: Usted No ha proporcionado un numero telefónico".

Si alguien sabe.. lo agradezco!.
OK, logre resolver lo del focus, ya esta hecho. me quedo algo asi:

 if (nombre == "") {
      $("#mensaje1").fadeIn();
      $("#nombre").focus();
      return false;
	}else

Solo resta el problemita del:

El campo Telefono, no es obligatorio, no hace una validación el .js simplemente envía el dato si es que el cliente lo llena o no lo envía si no hay nada. pero e gustaría que si el cliente no lo reyena , me llegue un mensaje qie diga: "no ha proporcionado un numero de teléfono" , ya que en la respuesta automática a mis clientes hay un texto que dice: "gracias por contactarnos etc etc , responderemos al $mail etc etc o lo llamaremos al: $teléfono, pero si no rellena el campo mejor seria que dijiera: "lo llamaremos al: Usted No ha proporcionado un numero telefónico".

Si alguien sabe.. lo agradezco!.
OK. logre solucionar lo del aray, ya no me lega la palabra array, el problema estaba en el php , estaba recogiendo mal. lo solucione con esto:

$cuerpo .= "El lugar a tratar es: ".implode(',',$lugardetrabajo)."<br>";