Foros del Web » Programando para Internet » Javascript »

validar solo 1 del arreglo

Estas en el tema de validar solo 1 del arreglo en el foro de Javascript en Foros del Web. Hola muchachos, les cuento, tengo un formulario con un campo tipo arreglo <input type="file" name="archivo[]" /> tengo un javascript con + - para crear y ...
  #1 (permalink)  
Antiguo 13/04/2010, 09:34
Avatar de kaninox  
Fecha de Ingreso: septiembre-2005
Ubicación: In my House
Mensajes: 3.597
Antigüedad: 18 años, 7 meses
Puntos: 49
validar solo 1 del arreglo

Hola muchachos, les cuento, tengo un formulario con un campo tipo arreglo

<input type="file" name="archivo[]" />

tengo un javascript con + -
para crear y quitar este tipo de campos, el problema es que me pidieron solo valide el primero siempre. como puedo hacerlo? si ademas tengo otro campo tipo arreglo y me piden lo mismo


<input type="file" name="archivo1[]" /> <input ... agrega +> <input ... quita ->

<input type="file" name="archivo2[]" /> <input ... agrega +> <input ... quita ->

no se si se entiende la idea.

saludos
__________________
Gokuh Salvo al mundo. PUNTO!!!!
  #2 (permalink)  
Antiguo 13/04/2010, 10:42
Avatar de sweetlydark  
Fecha de Ingreso: septiembre-2008
Mensajes: 391
Antigüedad: 15 años, 7 meses
Puntos: 10
Respuesta: validar solo 1 del arreglo

Quieres validar solo el primer arreglo o solo el primer input de ese arreglo?
__________________
Por fin vuelvo a tener internet!
http://www.anidandoetiquetas.com/
  #3 (permalink)  
Antiguo 13/04/2010, 11:06
Avatar de kaninox  
Fecha de Ingreso: septiembre-2005
Ubicación: In my House
Mensajes: 3.597
Antigüedad: 18 años, 7 meses
Puntos: 49
Respuesta: validar solo 1 del arreglo

el primer input de cada arreglo digamos

si tengo archivo[1]
archivo[2]
archivo[3]

y archivo2[1]
archivo2[2]
archivo3[3]

entonces validar que siempre son obligatorios archivo[1] y archivo2[1]
espero se pueda :D
saludos
__________________
Gokuh Salvo al mundo. PUNTO!!!!
  #4 (permalink)  
Antiguo 13/04/2010, 13:13
Avatar de sweetlydark  
Fecha de Ingreso: septiembre-2008
Mensajes: 391
Antigüedad: 15 años, 7 meses
Puntos: 10
Respuesta: validar solo 1 del arreglo

Si se puede pero tienes que recordar que los arreglos empieza en 0. Vas a tener que usar el colecion de elements asi:

document.myform.elements['archivo1[]'][0].value

Donde archivo1[] es el nombre del archivo y 0 cual dentro del arreglo debe de verificar.
__________________
Por fin vuelvo a tener internet!
http://www.anidandoetiquetas.com/
  #5 (permalink)  
Antiguo 13/04/2010, 14:43
Avatar de kaninox  
Fecha de Ingreso: septiembre-2005
Ubicación: In my House
Mensajes: 3.597
Antigüedad: 18 años, 7 meses
Puntos: 49
Respuesta: validar solo 1 del arreglo

te entiendo y me resulta pero solo cuando le doy al click + o sea agrego una caja de texto. te dejo mi codigo con el validador de la primera caja para que chequees en que falla.

Código HTML:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="es">
  3. <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
  4. <title>Prueba</title>
  5. <style type="text/css">
  6. html,body {
  7.     margin:0px;
  8.     padding:0px;
  9.     min-height:100%;
  10.     font-family: Verdana;
  11.     font-size: 12px;
  12.     color: #FFF;
  13.     background:#000;
  14.     }
  15. input {
  16. font-family: Verdana;
  17. color: #111111;
  18. font-size: 10px;
  19. background-color: #D9EA97;
  20. border-color: #111111;
  21. text-decoration: none;
  22. border: #111111 2px solid;
  23. }
  24. input[disabled] {
  25. font-family: Verdana;
  26. color: #FFFFFF;
  27. font-size: 10px;
  28. background-color: #999999;
  29. border-color: #999999;
  30. text-decoration: none;
  31. border: #111111 2px solid;
  32. }
  33. a:visited { color: #666666;text-decoration: none}  
  34. a:Link{color: #666666; text-decoration: none;}
  35. a:hover{color: #93CB0A;text-decoration: none}
  36. a { outline:none; }
  37. <script type="text/javascript">
  38. <?php
  39. if(isset($generar)){$contador=$generar + 1;}
  40. else{$contador=1;}
  41. echo 'var contador='.$contador;
  42. ?>
  43.  
  44. function agregar(){
  45. var tabla=document.getElementById("tabla").getElementsByTagName("tbody")[0];
  46. var tr=document.createElement("tr");
  47. var td=document.createElement("td");
  48. td.innerHTML='<div align="center" style="height:7px;"></div><div align="center"><input type="text" name="titulo[]" size="50"></div>';
  49. tr.appendChild(td);
  50. tabla.appendChild(tr);
  51. contador++;
  52. if(contador==4)
  53. document.getElementById('masmas').disabled=true;
  54. }
  55.  
  56. function quitar(){
  57. var tabla=document.getElementById("tabla").getElementsByTagName("tbody")[0];
  58. var ultima_fila=tabla.rows.length-1;
  59. if(ultima_fila>0){
  60. tabla.removeChild(tabla.getElementsByTagName("TR").item(ultima_fila));
  61. contador--;
  62. if(contador<=4)
  63. document.getElementById('masmas').disabled=false;
  64. }
  65. }
  66. <script type="text/javascript">
  67. <?php
  68. if(isset($generar2)){$contador2=$generar2 + 1;}
  69. else{$contador2=1;}
  70. echo 'var contador2='.$contador2;
  71. ?>
  72.  
  73. function agregar2(){
  74. var tabla=document.getElementById("tabla2").getElementsByTagName("tbody")[0];
  75. var tr=document.createElement("tr");
  76. var td=document.createElement("td");
  77. td.innerHTML='<div align="center" style="height:7px;"></div><div align="center"><input type="text" name="titulo2[]" size="50"></div>';
  78. tr.appendChild(td);
  79. tabla.appendChild(tr);
  80. contador2++;
  81. if(contador2==4)
  82. document.getElementById('masmas2').disabled=true;
  83. }
  84.  
  85. function quitar2(){
  86. var tabla=document.getElementById("tabla2").getElementsByTagName("tbody")[0];
  87. var ultima_fila2=tabla.rows.length-1;
  88. if(ultima_fila2>0){
  89. tabla.removeChild(tabla.getElementsByTagName("tr").item(ultima_fila2));
  90. contador2--;
  91. if(contador2<=4)
  92. document.getElementById('masmas2').disabled=false;
  93. }
  94. }
  95. <script languaje="javascript">
  96. function validar(formulario)
  97. {
  98.   if (document.formulario.elements['titulo[]'][0].value.length == "")
  99.    {
  100.     alert("Ingrese el primer titulo");
  101.     formulario.elements['titulo[]'][0].focus();
  102.     return (false);
  103.   }
  104. return (true);
  105. }
  106. </head>
  107. <?php
  108. if (isset($_POST[enviar]))
  109. {
  110. $caprow = $_POST['titulo'];
  111. $caprow2 = $_POST['titulo2'];
  112. for($i=0;$i<=3;$i++) {
  113. if ($caprow[$i] == ""){$caprow[$i] = "no_disponible";}else{$caprow[$i] = $caprow[$i];}
  114. if ($caprow2[$i] == ""){$caprow2[$i] = "no_disponible";}else{$caprow2[$i] = $caprow2[$i];}
  115. echo "$caprow[$i] - $caprow2[$i]<br />";
  116. }
  117. }
  118. ?>
  119. <br />
  120. <form name="formulario" action="cc.php" method="POST" onsubmit="return validar(this)" style="margin:0;padding:0;">
  121. <div align="left" style="margin:auto;width:780px;">
  122. <input type="button" value=" + " onClick="agregar();" id="masmas" title="Agregar Celda"> <input type="button" value=" - " onClick="quitar();" id="menos" title="Quitar Celda">
  123. <?php
  124. $tabin = "33";
  125. $tabinn = "200";
  126. echo '<table border="0" id="tabla"  width="100%" align="center" cellpadding="0" cellspacing="0">';
  127.     for($x=1; $x<=1; $x++){
  128.   $ttab = $tabin + $x;
  129.   $ttabn = $tabinn + $x;
  130.  echo "<tr><td align=\"center\">";
  131.   echo "<input type=\"text\" name=\"titulo[]\" size=\"50\" />";
  132.   echo "</td></tr>";
  133.   }
  134. echo '</table>';
  135. ?>
  136. </div>
  137. <br />
  138. <div align="left" style="margin:auto;width:780px;">
  139. <input type="button" value=" + " onClick="agregar2();" id="masmas2" title="Agregar Celda"> <input type="button" value=" - " onClick="quitar2();" id="menos2" title="Quitar Celda">
  140. <?php
  141. $tabin = "33";
  142. $tabinn = "200";
  143. echo '<table border="0" id="tabla2"  width="100%" align="center" cellpadding="0" cellspacing="0">';
  144.     for($x2=1; $x2<=1; $x2++){
  145.   $ttab = $tabin + $x2;
  146.   $ttabn = $tabinn + $x2;
  147.  echo "<tr><td align=\"center\">";
  148.   echo "<input type=\"text\" name=\"titulo2[]\" size=\"50\" />";
  149.   echo "</td></tr>";
  150.   }
  151. echo '</table>';
  152. ?>
  153. </div>
  154. <br /><br />
  155. <div align="center"><input type="submit" name="enviar" value="Enviar" /></div>
  156. </form>
  157. </body></html>

A lo que voy yo, es que si presiono sin hacer nada envia el formulario, pero si creo dos cajas de texto con el primer boton agregar hay me salta el alert.

gracias por la ayuda :D
__________________
Gokuh Salvo al mundo. PUNTO!!!!
  #6 (permalink)  
Antiguo 13/04/2010, 15:17
Avatar de sweetlydark  
Fecha de Ingreso: septiembre-2008
Mensajes: 391
Antigüedad: 15 años, 7 meses
Puntos: 10
Respuesta: validar solo 1 del arreglo

Creo que el problema es que si no añades el segundo no existe un arreglo (puede que te salga un error de javascript en esta parte que dice que el objecto no existe).

Vas a tener que verificar dos cosas:

document.myform.elements['archivo1[]'].value
document.myform.elements['archivo1[]'][0].value
__________________
Por fin vuelvo a tener internet!
http://www.anidandoetiquetas.com/
  #7 (permalink)  
Antiguo 13/04/2010, 15:38
Avatar de kaninox  
Fecha de Ingreso: septiembre-2005
Ubicación: In my House
Mensajes: 3.597
Antigüedad: 18 años, 7 meses
Puntos: 49
Respuesta: validar solo 1 del arreglo

mmmm solo me funciona con una condicion cuando agrego las dos una se cae he probado con OR tambien y nada :/
alguna idea...

(esto de ser cutre para el JS :P)
__________________
Gokuh Salvo al mundo. PUNTO!!!!
  #8 (permalink)  
Antiguo 13/04/2010, 15:52
Avatar de sweetlydark  
Fecha de Ingreso: septiembre-2008
Mensajes: 391
Antigüedad: 15 años, 7 meses
Puntos: 10
Respuesta: validar solo 1 del arreglo

Sorry tienes que primero verificar cual de los dos existe si no te va tirar un error usa algo asi:

if(document.myform.elements['archivo1[]'][0]){
alert('existe arreglo');
}
else if(document.myform.elements['archivo1[]']){
alert('no hay arreglo');
}
__________________
Por fin vuelvo a tener internet!
http://www.anidandoetiquetas.com/
  #9 (permalink)  
Antiguo 13/04/2010, 16:24
Avatar de kaninox  
Fecha de Ingreso: septiembre-2005
Ubicación: In my House
Mensajes: 3.597
Antigüedad: 18 años, 7 meses
Puntos: 49
Respuesta: validar solo 1 del arreglo

mmmm me da un error me funciona ok pero luego si lleno el campo me sale siempre que hay arreglo, yo hice ....

Código Javascript:
Ver original
  1. <script languaje="javascript">
  2. function validar(formulario)
  3. {
  4.  
  5. if(document.formulario.elements['titulo[]'][0]){
  6. alert('existe arreglo');
  7. document.formulario.elements['titulo[]'][0].focus();
  8. return (false);
  9. }
  10. else if(document.formulario.elements['titulo[]'].value.length == ""){
  11. alert('no hay arreglo');
  12. document.formulario.elements['titulo[]'].focus();
  13. return (false);
  14. }
  15.  
  16. return (true);
  17. }
  18. </script>

si pongo


if(document.formulario.elements['titulo[]'][0].value.length == ""){

al principio no hace nada asi que lo deje asi, y funciona excepto por el problema de cuando creo la caja. con arreglo :/ me dice siempre que existe arreglo.
Saludos y gracias por toda la ayuda.
__________________
Gokuh Salvo al mundo. PUNTO!!!!
  #10 (permalink)  
Antiguo 13/04/2010, 20:11
Avatar de sweetlydark  
Fecha de Ingreso: septiembre-2008
Mensajes: 391
Antigüedad: 15 años, 7 meses
Puntos: 10
Respuesta: validar solo 1 del arreglo

No veo el problema y no lo puedo recrear. A menos que tu dices cuando añades y quites la caja dejando lo en uno de nuevo. Allí siempre va decir que hay un arreglo porque ya fue creado. Esto no te debería causar problema ya siempre puedes verificar el primero.

Probé tu código así:

Código:
<form name="formulario">
<input type="file" name="titulo[]">
<input type="file" name="titulo[]">
<input type="button" value="test" onclick="tester()">
</form>
<script>
function tester(){
	if(document.formulario.elements['titulo[]'][0]){
		alert('existe arreglo');
		document.formulario.elements['titulo[]'][0].focus();
		return (false);
	}
	else if(document.formulario.elements['titulo[]'].value.length == ""){
		alert('no hay arreglo');
		document.formulario.elements['titulo[]'].focus();
		return (false);
	}
	return (true);
}
</script>
Con texto, sin texto, con una caja y siempre me sale todo bien.

No entiendo
Cita:
excepto por el problema de cuando creo la caja. con arreglo :/ me dice siempre que existe arreglo.
Cuando hay mas de una caja, se supone que vaya al opción que dice hay arreglo. Por eso se creo este sección de código, cuando hay sola una caja, el arreglo no existe y document.formulario.elements['titulo[]'][0] no es valido pero si hay mas de una caja, document.formulario.elements['titulo[]'] no es valido.

El código verifica primero cual es valido, para que luego puedas verificar el primer elemento del arreglo. Puedes hasta usarlo, para guardar el correcto en un variable y verificar con el.
__________________
Por fin vuelvo a tener internet!
http://www.anidandoetiquetas.com/
  #11 (permalink)  
Antiguo 13/04/2010, 20:40
Avatar de kaninox  
Fecha de Ingreso: septiembre-2005
Ubicación: In my House
Mensajes: 3.597
Antigüedad: 18 años, 7 meses
Puntos: 49
Respuesta: validar solo 1 del arreglo

probe tu codigo y pues me pasa lo mismo :/
haber te explico un poco el tema.

caso 1 : tengo la caja de texto vacía, si aprieto enviar debería decirme no hay texto : eso lo hace

caso 2 : ingreso texto y aprieto el botón enviar y envía el texto : también lo hace

caso 3 : creo una nueva caja, apreto el botn me dice hay arreglo, ok pero pongo texto, y no me envia la info :/ se queda pegado en hay arreglo entonces no puedo enviar el formulario.

tambien ingreso texto en la caja 1, 2, 3 y 4 y lo mismo no me deja enviar. saludos
__________________
Gokuh Salvo al mundo. PUNTO!!!!
  #12 (permalink)  
Antiguo 14/04/2010, 19:09
Avatar de sweetlydark  
Fecha de Ingreso: septiembre-2008
Mensajes: 391
Antigüedad: 15 años, 7 meses
Puntos: 10
Respuesta: validar solo 1 del arreglo

Bueno en el primer if solo estas verificando si hay un arreglo y cuando hay mas de una caja esto siempre es cierto. Necesitas incluir una verificacion adicional aqui para lograr lo que quieres.
__________________
Por fin vuelvo a tener internet!
http://www.anidandoetiquetas.com/

Etiquetas: arreglos
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 17:08.