necesito ayuda con un formulario jquery

C

Hola,

Necesito ayuda con un formulario que he creado, casi todo el formulario tiene campo de texto, y el campo de texto no me da ningún problema al enviarlo, pero le he puesto un efecto jquery para que el usuario vaya añadiendo campos de testo, y no consigo que esa parte llegue en el email. Os dejo aquí el código para ver si podéis ayudarme por que me estoy volviendo loca.

<link href="estilo1.css" rel="stylesheet" type="text/css" media="screen" />
<script src="java/js/jquery.js" type="text/javascript"></script>
<script src="java/js/mobilyslider.js" type="text/javascript"></script>
<script src="java/js/init.js" type="text/javascript"></script>
<link href="java/css/default.css" rel="stylesheet" type="text/css" />
<link href="print.css" rel="stylesheet" type="text/css" media="print" />
<script type="text/javascript">
function MM_validateForm() { //v4.0
  if (document.getElementById){
    var i,p,q,nm,test,num,min,max,errors='',args=MM_validateForm.arguments;
    for (i=0; i<(args.length-2); i+=3) { test=args[i+2]; val=document.getElementById(args[i]);
      if (val) { nm=val.name; if ((val=val.value)!="") {
        if (test.indexOf('isEmail')!=-1) { p=val.indexOf('@');
          if (p<1 || p==(val.length-1)) errors+='- '+nm+' must contain an e-mail address.\n';
        } else if (test!='R') { num = parseFloat(val);
          if (isNaN(val)) errors+='- '+nm+' must contain a number.\n';
          if (test.indexOf('inRange') != -1) { p=test.indexOf(':');
            min=test.substring(8,p); max=test.substring(p+1);
            if (num<min || max<num) errors+='- '+nm+' must contain a number between '+min+' and '+max+'.\n';
      } } } else if (test.charAt(0) == 'R') errors += '- '+nm+' is required.\n'; }
    } if (errors) alert('The following error(s) occurred:\n'+errors);
    document.MM_returnValue = (errors == '');
} }
</script>
<script language="javascript" type="text/javascript"> /* Abrimos etiqueta de código Javascript */

/* Partimos por definir una variable llamada posicionCampo. Esta variable servirá como índices para marcar cuantos campos se han agregado dinámicamente. La inicializamos en 1, ya que la primera llamada ocurrirá cuando no hayan campos agregados */

var posicionCampo=1;

/* Declaramos la función agregarUsuario( ) */

function agregarUsuario(){

/* Declaramos una variable llamada nuevaFila y a ella le asignamos la recuperación del elemento HTML designado por el id tablaUsuarios. En este caso, la tabla en la que manejamos los campos dinámicamente y llamamos a la función insertRow para agregar una fila */

nuevaFila = document.getElementById("tablaUsuarios").insertRow(-1);

/* Asignamos a la propiedad id de nuevaFila el valor de posicionCampo, que inicializamos en 1 */

nuevaFila.id=posicionCampo;

/* Luego en otra variable llamada nuevaCelda, agregaremos una celda a la tabla, mediante la función insertCell */

nuevaCelda=nuevaFila.insertCell(-1);

/* Con la celda creada, insertamos dinámicamente un campo de texto, el cual almacenaremos en un array llamado nombre, con una posición equivalente a la variable posicionCampo. Una vez terminado, repetimos la acción para el sitio Web y correo, asignando al array respectivo */

nuevaCelda.innerHTML="<td><input type='text' size='20′ name='txtreferencia["+posicionCampo+"]' ></td>";

nuevaCelda=nuevaFila.insertCell(-1);

nuevaCelda.innerHTML="<td> <input type='text' size='60′ name='txtmodelo["+posicionCampo+"]' ></td>";

nuevaCelda=nuevaFila.insertCell(-1);

nuevaCelda.innerHTML="<td> <input type='text' size='10′ name='txtcantidad["+posicionCampo+"]' ></td>";

/* Finalmente añadimos una última celda para las acciones y ahí agregamos un botón llamado Eliminar, el cual al ser presionado (definiendo la propiedad onClick), llamará a una función eliminarUsuario, pasando como parámetro la fila correspondiente */

nuevaCelda=nuevaFila.insertCell(-1);

nuevaCelda.innerHTML="<td><input type='button' value='Eliminar' onclick='eliminarUsuario(this)'></td>";

/* Incrementamos el valor de posicionCampo para que empiece a contar de la fila siguiente */

posicionCampo++;

}

/* Definimos la función eliminarUsuario, la cual se encargará de quitar la fila completa del formulario. No es necesario hacer modificaciones sobre este código */

function eliminarUsuario(obj){

var oTr = obj;

while(oTr.nodeName.toLowerCase()!='tr'){

oTr=oTr.parentNode;

}

var root = oTr.parentNode;

root.removeChild(oTr);

}

/* Cerramos el código Javascript */

</script>
</head>

Y LA PARTE DE ENVIAR_PEDIDO:

<?php
 @$nombre=$_POST["txtnombre_comercial"];
 @$codigo=$_POST["txtcod_comercial"];
 @$empresa=$_POST["txtempresa"];
 @$cif=$_POST["txtcif"];
 @$direccion=$_POST["txtdireccion"];
 @$telefono=$_POST["txttelefono"];
 @$fax=$_POST["txtfax"];
 @$email=$_POST["txtemail"];
 @$percontacto=$_POST["txtpercontacto"];
 @$nupedido=$_POST["txtnumero_pedido"];
 @$referencia=$_POST["txtreferencia"];
 @$modelo=$_POST["txtmodelo"];
 @$cantidad=$_POST["txtcantidad"];
	

//Preparamos el mensaje de contacto
$cabeceras = "From: $email\n" //La persona que envia el correo
 . "Reply-To: $email\n";
$asunto = "$asunto"; //El asunto
$email_to = "[email protected]"; //cambiar por tu email
$contenido = "Mensage de: $nombre\n"
. "\n"
. "Codigo del comercial: $codigo\n"
. "\n"
. "Empresa: $empresa\n"
. "\n"
. "Cif: $cif\n"
. "\n"
. "Direccion: $direccion\n"
. "\n"
. "Telefono: $telefono\n"
. "\n"
. "Fax: $fax\n"
. "Email: $email\n"
. "\n"
. "Persona de contacto: $percontacto\n"
. "\n"
. "Numero del pedido: $nupedido\n"
. "\n"
. "PEDIDO: \n"
. "\n"
. "Referencia: $referencia\n"
. "\n"
. "Modelo: $modelo\n"
. "\n"
. "Cantidad: $cantidad\n"
. "\n";

@mail($email_to, $asunto ,$contenido ,$cabeceras )
	

?>
tOWERR

#1 El código por favor mételo entre las etiquetas

 que tienes en la parte superior al escribir el mensaje para que se entienda el mensaje.
1
C

gracias towerr, es la primera vez que escribo en este foro y estoy un poco verde

elkaoD

Ahí no hay jQuery alguno (o no lo he visto).

Veo que estás intentando enviar un array (por el txtmodelo["+posicionCampo+"]). Eso no se puede que yo sepa.

1
eXtreM3

Puf, menudo copypaste. A ver, en pseudocódigo sería tal que:

  • Creas todos los input que quieras.

  • A la hora de procesarlos, haces un foreach que los recorra todos (por el name o el id que hayas puesto) y vas guardando las variables.

  • Mmmmm vale, como voy escribiendo sobre la marcha, lo de antes puedes hacerlo directamente a la hora de escribir el email. Vas procesando los input con el foreach y los vas pintando con echo.

Fin :D

C

Gracias extrem3, pero llevo muy poco tiempo programando con php y estoy bastante verde.
Cre que no puedo crear todos los input que quiera por que es un formulario dinamico de javascript que tiene la opción de añadir campos, hay esta mi problema, todos los formularios qu he hecho para enviar por email los he hecho con campos de texto y poniendo el nombre en el input ejemplo:

rcial"></label>
              <input name="txtnombre_comercial" type="text" id="txtnombre_comercial" />

y luego creando otra página para que me lo mande por email ,poniendo este código:

<?php
 @$nombre=$_POST["txtnombre_comercial"];
	//Preparamos el mensaje de contacto
$cabeceras = "From: $email\n" //La persona que envia el correo
 . "Reply-To: $email\n";
$asunto = "$asunto"; //El asunto
$email_to = "[email protected]"; //cambiar por tu email
$contenido = "Mensage de: $nombre\n"
. "\n"
. "Codigo del comercial: $codigo\n"
. "\n";
@mail($email_to, $asunto ,$contenido ,$cabeceras )
	

?>

Mi problema esta en que esa parte en la que pueden añadir campos los usuarios a traves de un botón de añadir campos no se como hacer que me lleguen por email.

Si podéis ayudarme os estaría muy agradecida por que estoy mirando en tutoriáles y ni por esas

C

esta parte que he escrito es como lo hago yo cuando no tengo ningun efecto javascript para añadir filas, el código de la opción añadir filas es el que puse el primer día

1 respuesta
gohrum

1 1 respuesta
kraneok

Utilizo este hilo para pedir ayuda.

Resulta que estoy validando un form desde js con jquery y querría enviarlo hacia el php que envía el correo con AJAX ( $.ajax ), la cosa es que no me responde el .php.
Es decir, jQuery envía por ajax todo lo referido al correo pero no me devuelve nada.
A ver si me podéis arrojar algo de luz, gracias.


$( 'form :submit' ).click( function(){
			
  var mailvalidate = /^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$/;
		
  var vivienda  = $( 'select[name="inmutype"]' ).val();
  var extension = $( 'input[name="extends"]' ).val();
		var city	  = $( 'input[name="city"]' ).val();
		var email	  = $( 'input[name="email"]' ).val();
		var phone	  = $( 'input[name="phone"]' ).val();
		
		var param = 
		{
			"v" : vivienda,
			"e" : extension,
			"c" : city,
			"em": email,
			"p" : phone
		};
		
		if( vivienda != "" )
		{
			if( email != "" && mailvalidate.test( email ) )
			{
				$.ajax({
					url : 'sender.php',
					type: 'POST',
					data: param,
					contentType: "application/x-www-form-urlencoded",
					beforeSend: function(){ alert( "iniciando" ); },
					dataType: "html",
					success: function( data ){
						alert( data );
					}
				});
			}
			else
			{
				
			}	
		}
	})

Debería saltar el alert con: enviado, pero nanai de la china.
Un saludo.

PD: Vaya mierda de código se ha quedado lol...

1 respuesta
gohrum

2 respuestas
kraneok

#10 Uhmm, eso es en el debugger?, si es así no sale nada, es lo raro.

kraneok

#10 Solucionado, el problema estaba en que al pulsar sobre el submit permitía que este hiciese su "trabajo" normal, es decir, eliminando el evento del botón por defecto con: event.preventDefault();, elimino su comportamiento y dejo que llegue al final.

Un saludo.

1 2 respuestas
gohrum

2 respuestas
Merkury

#12 Si vas a usar formularios y envios ajax, acostumbrate a que el envíar no sea un type=submit para eso se inventaron el type=button y el button en si vaya.

2 respuestas
elkaoD

#13 #14 mala práctica.

Lo que debe hacer es que SÍ sea submit y preparar la web para que si el usuario tiene JS desactivado funcione igual.

Preparar los formularios para que sólo funcionen con JS quita accesibilidad.

Hacéis llorar a Jakob Nielsen.

1 respuesta
eXtreM3

#15 preparar las webs para usuarios que tengan js desactivado es una gitanada. Al quitar manualmente esta funcionalidad debes ser capaz de comprender que la mayoría de webs no funcionarán correctamente.

Un website puede perder mucho sin la magia de jquery, por ejemplo.

2 respuestas
elkaoD

#16 así que tu excusa es que el cliente está equivocado.

¡Una forma genial de hacer negocios!

Me la suda la magia. La web tiene que funcionar, y punto.

Si quito JS y la web no funciona no es mi culpa, es de la web. Poner la culpa en el usuario es una excusa pobre. Si no me funciona el popup de los quotes en MV por tener el JS desactivado lo veo lógico (no es funcionalidad, es sólo un añadido) pero si no me funciona la web...

1 respuesta
eXtreM3

#17 no exactamente. Pero si pretendes desarrollar una web que sea:

  1. Vistosa y entre por los ojos.
  2. Completamente funcional en todos los navegadores.
  3. Las dos anteriores + JS desactivado.

Estarás haciendo webs de 1990.

1 respuesta
elkaoD

#18 lo dices como si fueran excluyentes.

Puedes hacer un formulario JS y que además funcione por el método tradicional.

Os estáis cargando la web.

1 respuesta
eXtreM3

#19 y las cargas asíncronas?

1 respuesta
elkaoD

#20 a qué te refieres.

Hacer una web que sólo funciona con JS sólo tiene excusa si la web es íntegramente dinámica (un videojuego por ejemplo).

Es el equivalente a cuando en los 2000s se hacían web que funcionaban sólo con Flash.

1 respuesta
eXtreM3

#21 o sea, estás debatiéndome todo esto y no sabes qué es cargar asíncronamente contenido.

Por ejemplo el Spy de mv no funciona sin js. Y millones de cosas más, navegar por la web con js activado hace que tu experiencia de usuario sea más satisfactoria.

Además, jQuery no es sólo hacer sliders. Puedes programar muchísimas funcionalidades.

1 respuesta
elkaoD

#22 sioketio me has descubierto mundo. Nunca he usado jQuery shurmano.

Cargas asíncronas puede significa muchas cosas, por eso te pedía aclaración.

Aún así, te referías exactamente a lo que pensaba que te referías. En el caso del spy es tan simple como que el ususario pulse F5 o uses refresh en el navegador. Si entro al Spy y me pone que necesito JS activado el fallo es tuyo, no mío por quitar JS. De hecho el Spy funciona sin JS.

Pero vamos cada cuál espanta a su clientela como quiere.

1 respuesta
eXtreM3

#23 que sí que sí, sigue haciendo webs de los años 90s.

Otro ejemplo, hace nada el thread que se abrió para un estudio de fotos y bodas (creo), que se les hizo la web -> http://www.prixmadigital.com/

Ese tipo de webs cómo las harías sin js? Ridículo.

Ah, y forzar al usuario a pulsar el F5 no es quitarle comodidad ni espantarlo, claro xd

Lo mismo con el minuto a minuto de Marca cuando quieres seguir un evento deportivo (o varios) tienes que ir pasando por todos los eventos y machacar el f5, qué buena tío, eso es muy eficiente!

1 respuesta
elkaoD

#24 forzar al ususario a pulsar F5?

Que no son excluyentes.

Si para ti hacer una web que funcione es volver a los 90, pues bienvenidos sean los 90. Eres un cutre chaval.

¿No te entra en la cabeza que puedes hacer las cosas bonitas y bien? Pues porque eres un cutre. Así de simple. Al que tenga JS que le funcione el JS y al que no, que le funcione sin JS. No son excluyentes. No tiene por qué elegir. Puedes dar ambas opciones. Se llama ser un profesional.

1 respuesta
eXtreM3

#25 estás siguiendo a la vez 3 partidos de tenis a través de marca directo, y cada 10 segundos refrescas las 3 pestañas? muy útil.

Cuando un diseñador te meta en la home de la web un slider reescalable le dices que eso no se puede hacer, que requiere js y el usuario lo puede tener desactivado.

1 respuesta
elkaoD

#26 entras al Marca sin JS y no funciona? Muy útil. ¿No será mejor dar un fallback al usuario? No, es mejor espantarle con un mensajito de "esta web no funciona sin JavaScript" en el mejor de los casos.

A ver yo no sé si es que no sabes leer. ¿Que quieres poner un slider? Pues lo pones. Pero no hagas que la web deje de funcionar si no uso JS.

Venga lo repito una vez más a ver si te entra en la puta cabeza:

Que no tienes que elegir.

Que puedes tener ambas.

El que tenga JS tiene toda la funcionalidad, y el que no, tendrá sólo la que se pueda hacer sin JS pero la web seguirá funcionando. Si tu web deja de funcionar porque no hay JS (el ya comentado button en lugar de submit) es que eres un cutre, así de claro.

Lo dicho, vuelve tú a los 90 a hacer páginas en Flash.

Si entras a http://www.mediavida.com/foro/spy sin JS activado no se actualiza pero al menos funciona. ¿Tan difícil es de entender?

1 respuesta
Sonos

Cuando venga un cliente y te pida una web bajo estándares de accesibilidad, tb será una web delos "90"? xD. Puedes hacer un formulario bajo js, pero cuando esté desactivado que funcione de la forma tradicional, y esto nada tiene que ver con lo visual.

2 1 respuesta
eXtreM3

#28 no estamos hablando ya solamente de formularios.

#27 es absurdo seguir discuendo sobre las ventajas de JS y jQuery frente a tenerlo desactivado.

Vaya edits te marcas colega, tengo que releer tus comentarios 2 o 3 veces.

1 respuesta
elkaoD

#29 nadie está discutiendo eso.

1 respuesta