Foros del Web » Programando para Internet » Javascript » Frameworks JS »

checkbox

Estas en el tema de checkbox en el foro de Frameworks JS en Foros del Web. Hola tengo un problema al querer pasar los valores de un grupo de checkbox por ajax y me veo obligado a validarlos... el problema es ...
  #1 (permalink)  
Antiguo 03/07/2009, 12:26
Avatar de cesarpunk  
Fecha de Ingreso: enero-2008
Ubicación: Lima
Mensajes: 943
Antigüedad: 16 años, 3 meses
Puntos: 9
checkbox

Hola tengo un problema al querer pasar los valores de un grupo de checkbox por ajax y me veo obligado a validarlos... el problema es que no me resulta la validacion:

Código:
function enviaContacto(){
	var c = document.getElementById('resultado_envio');
	var nombre = document.frmcontacto.nombre.value;
	var pais = document.frmcontacto.pais.value;
	var email = document.frmcontacto.email.value;
	var modelo = document.frmcontacto.modelo.value;
	var nosotros = document.frmcontacto.nosotros.value;
	var otrospago = document.frmcontacto.otrospago.value;
	var otroscompra = document.frmcontacto.otroscompra.value;
	var telefono = document.frmcontacto.telefono.value;
	var celular = document.frmcontacto.celular.value;
	var mensaje = document.frmcontacto.mensaje.value;
	
/* aqui valido otros campos ... */
	
/* aqui valido otros el grupo de chekbox:*/
			
	selectsist=false;
	for(i=0;i < document.frmcontacto.sys.length; i++){
		if(document.frmcontacto.sys[i].checked){
			var sistema = document.frmcontacto.sys[i].value;
			selectsist=true;
		}
	}
	if(!selectsist){
		alert("Debe seleccionar un sistema.");
		return false;
	}
		
		
	ajax=nuevoAjax();
	c.innerHTML = '<p style="text-align:center;color:#454545; font-size:10px">Enviando...<br><img src="images/contacto/sending.gif" width="77" height="11" align="absmiddle"></p>';
	ajax.open("POST", "ajax_envia_mail.php",true);
	ajax.onreadystatechange=function(){
		if (ajax.readyState==4) {
			c.innerHTML = ajax.responseText
		}
	}
	ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
	ajax.send("nombre="+nombre+"&pais="+pais+"&email="+email+"&modelo="+modelo+"&nosotros="+nosotros+"&modificado="+modificado+"&tuning="+tuning+"&pago="+pago+"&otrospago="+otrospago+"&compra="+compra+"&otroscompra="+otroscompra+"&sistema="+sistema+"&telefono="+telefono+"&celular="+celular+"&mensaje="+mensaje+"&control=enviado");
}
Los otros campos lo valida normal, el problema es que cuando toca validar los checkbox, el formulario se me reinicia o recarga... esta mal como lo valido? asi tengo mis checkboxes para poder pasar los datos por POST:

<input name="sys[]" type="checkbox" value="sistem1 />
<input name="sys[]" type="checkbox" value="sistem2 />
<input name="sys[]" type="checkbox" value="sistem3 />


espero me puedan ayudar, gracias!
__________________
Quitenme la vida pero no la bebida.
  #2 (permalink)  
Antiguo 03/07/2009, 12:41
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: checkbox

Es que los campos se llaman sys[], y no sys. Por lo que para acceder a ellos debes usar document.frmcontacto["sys[]"]

Saludos.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #3 (permalink)  
Antiguo 03/07/2009, 12:52
Avatar de cesarpunk  
Fecha de Ingreso: enero-2008
Ubicación: Lima
Mensajes: 943
Antigüedad: 16 años, 3 meses
Puntos: 9
Respuesta: checkbox

Hola david... gracias por tu respuesta, probe asi:

Código:
	selectsist=false;
	for(i=0;i < document.frmcontacto["sys[]"].length; i++){
		if(document.frmcontacto["sys[]"].checked){
			var sistema = document.frmcontacto["sys[]"].value;
			selectsist=true;
		}
	}
	if(!selectsist){
		alert("Debe seleccionar un sistema que le interes.");
		return false;
	}
como consecuencia me valida una y otra vez asi todos los checkbox esten marcados... nose como validarlo correctamente, espero me puedas ayudar ya que no se mucho js
__________________
Quitenme la vida pero no la bebida.
  #4 (permalink)  
Antiguo 03/07/2009, 12:54
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: checkbox

Si te fijas, dentro del if no estás especificando el índice, tampoco al obtener el value; debería ser document.frmcontacto["sys[]"][i]
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #5 (permalink)  
Antiguo 03/07/2009, 13:04
Avatar de cesarpunk  
Fecha de Ingreso: enero-2008
Ubicación: Lima
Mensajes: 943
Antigüedad: 16 años, 3 meses
Puntos: 9
Respuesta: checkbox

sip ya me di cuenta... me faltaba eso... ahora lo valida normal, gracias... pero mi problema principal persiste, no rescata el valor

Cuando paso el valor del chekbox por ajax... me lo pasa como un array?? porque puedo seleccionar mas de uno, porque cuando los recibo por POST lo hago asi:

Código PHP:
$sistema implode(',',$_POST['sys']); 
Pero me sale error, implode() [function.implode]: Bad arguments in ...

sale eso porque creo que no recibe nada.... me puede ayudar?
__________________
Quitenme la vida pero no la bebida.
  #6 (permalink)  
Antiguo 03/07/2009, 13:07
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: checkbox

Como he mostrado en este tema:
http://www.forosdelweb.com/f18/captu...7/#post2989513

Para enviar datos de los checkbox debes enviarlos por la URL así:
sys[]=valor&sys[]=valor&sys[]=valor por cada checkbox que esté marcado.

Tienes que concatenar en cada paso del bucle for.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #7 (permalink)  
Antiguo 03/07/2009, 13:19
Avatar de cesarpunk  
Fecha de Ingreso: enero-2008
Ubicación: Lima
Mensajes: 943
Antigüedad: 16 años, 3 meses
Puntos: 9
Respuesta: checkbox

pero en ajax lo envio con el metodo POST ... debo cambiar algo en esa funcion js? ... realmente se me complica algo que estan simple sin ajax
__________________
Quitenme la vida pero no la bebida.
  #8 (permalink)  
Antiguo 03/07/2009, 13:21
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: checkbox

El método en este caso es lo de menos, el formato en que se deben enviar los datos es la misma, debes hacerlo como está en el otro tema que enlacé (recorrer los checkbox, ver cuáles están marcados y de acuerdo a eso concatenar de la forma sys[]=valor&sys[]=valor... después, enviar esos datos)
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #9 (permalink)  
Antiguo 03/07/2009, 13:35
Avatar de cesarpunk  
Fecha de Ingreso: enero-2008
Ubicación: Lima
Mensajes: 943
Antigüedad: 16 años, 3 meses
Puntos: 9
Respuesta: checkbox

Bueno lo unico que se me ocurre es la de lanzar los datos por URL cuando la validación sale true ....

Código:
	

selectsist=false;
	for(i=0;i < document.frmcontacto["sys[]"].length; i++){
		if(document.frmcontacto["sys[]"][i].checked){
			var sistema = document.frmcontacto["sys[]"][i].value;
			pagina="ajax_envia_mail.php?sys[]="+sistema;
			document.location=pagina;
			selectsist=true;
			
		}
	}
	if(!selectsist){
		alert("Debe seleccionar un sistema que le interes.");
		return false;
	}
pero se dispara antes de enviar xd
__________________
Quitenme la vida pero no la bebida.
  #10 (permalink)  
Antiguo 03/07/2009, 13:41
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: checkbox

No necesitas redirigir. Sólo necesitas concatenar los valores. Lee cuidadosamente este mensaje: http://www.forosdelweb.com/2989566-post10.html

Eso podrías usarlo dentro del bucle for, verás que se usa el operador += (concatenación) para ir almacenando los diferentes id[] con su respectivo valor.

Después del bucle for, lo único que necesitas hacer es usar la variable "estos" junto con los demás parámetros que envías.

Prueba y cualquier cosa, si no se entiende, puedes preguntar.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #11 (permalink)  
Antiguo 03/07/2009, 13:58
Avatar de dquispe  
Fecha de Ingreso: mayo-2009
Ubicación: Lima
Mensajes: 232
Antigüedad: 15 años
Puntos: 0
Respuesta: checkbox

Interesante tu tema soy nuevo en esto de ajax ... y estoy haciendo un sistema para el control de celulares de mi empresa.. bueno saludos... tengo problemas en mi validación de campos ojala me puedas ayudar.
  #12 (permalink)  
Antiguo 03/07/2009, 14:33
Avatar de cesarpunk  
Fecha de Ingreso: enero-2008
Ubicación: Lima
Mensajes: 943
Antigüedad: 16 años, 3 meses
Puntos: 9
Respuesta: checkbox

Hola, gracias por tu ayuda... pues me resulto, ahora coje todos los valores:

Código:
	selectsist=false;
	var estos =new Array();
    var arrClaves = new Array();
    j=0;ff=0;
	for(i=0;i < document.frmcontacto["sys[]"].length; i++){
		if(document.frmcontacto["sys[]"][i].checked){
			
			var sistema = document.frmcontacto["sys[]"][i].value;
			arrClaves[j]=sistema;
            estos[ff]="&sys[]="+arrClaves[j];
            ff++;
            j++;
			selectsist=true;
			
		}
	}
	if(!selectsist){
		alert("Debe seleccionar un sistema que le interese.");
		return false;
	}

pero un pequeño detalle cuando los recibo en el php, los capturo asi:

$estos = implode(',',$_POST['sys']);

y cuando los imprimo me sale este resultado: " sistema1,,sistem2,,sistem3 "

osea los separa con 2 comas.... porque?
__________________
Quitenme la vida pero no la bebida.
  #13 (permalink)  
Antiguo 03/07/2009, 14:39
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: checkbox

El índice en la variable "estos" es innecesario.

Puedes dejar la declaración así:
Código javascript:
Ver original
  1. var estos = "";
Y el código tal como estaba en el mensaje:
Código javascript:
Ver original
  1. estos += (estos != '') ? '&' : '';
  2. estos += 'id[]=' + escape(sistema);
ff++ y j++ son innecesarios en ese contexto.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #14 (permalink)  
Antiguo 03/07/2009, 14:44
Avatar de cesarpunk  
Fecha de Ingreso: enero-2008
Ubicación: Lima
Mensajes: 943
Antigüedad: 16 años, 3 meses
Puntos: 9
Respuesta: checkbox

bueno muchas gracias por tu paciencia, me funciono perfectamente, saludos
__________________
Quitenme la vida pero no la bebida.
  #15 (permalink)  
Antiguo 03/07/2009, 16:11
Avatar de cesarpunk  
Fecha de Ingreso: enero-2008
Ubicación: Lima
Mensajes: 943
Antigüedad: 16 años, 3 meses
Puntos: 9
Respuesta: checkbox

mmm hola denuevo.... estuve probando el codigo pero aun hay un error: segund tu codigo hago esto:

Código:
	selectsist=false;
	var estos = "";
	for(i=0;i < document.frmcontacto["sys[]"].length; i++){
		if(document.frmcontacto["sys[]"][i].checked){
			
			var sistema = document.frmcontacto["sys[]"][i].value;
			estos += (estos != '') ? '&' : '';
			estos += 'sys[]=' + escape(sistema);
			selectsist=true;
			
		}
	}
	if(!selectsist){
		alert("Debe seleccionar un sistema que le interese.");
		return false;
	}
Pero cuando escojo el primer checkbox... no toma el valor... los otros si ... porque?
__________________
Quitenme la vida pero no la bebida.
  #16 (permalink)  
Antiguo 03/07/2009, 18:14
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: checkbox

Haz un alert(estos); para verificar el valor de la variable.
Además, si antes de sys[] envías otras variables, probablemente en todos los casos tengas que concatenar '&'
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:24.