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

Ajax, javascript y un botón "submit"

Estas en el tema de Ajax, javascript y un botón "submit" en el foro de Frameworks JS en Foros del Web. Hola expert@s, Hace unos días os lancé una pregunta sobre Javascript y me ayudásteis mucho, ahora tengo otro problemilla Tengo un foro phpBB en el ...
  #1 (permalink)  
Antiguo 17/02/2010, 04:00
 
Fecha de Ingreso: febrero-2010
Mensajes: 19
Antigüedad: 14 años, 2 meses
Puntos: 0
Ajax, javascript y un botón "submit"

Hola expert@s,

Hace unos días os lancé una pregunta sobre Javascript y me ayudásteis mucho, ahora tengo otro problemilla

Tengo un foro phpBB en el que estoy implantando AJAX para que cada una de sus páginas, se carguen dentro de un DIV llamado 'barent'. Para ello tengo ya definida la función javascript que es la siguiente:

Código:
<script language="javascript">
// direccion del sitio web;
var site_address = 'http://foro.guillermocampra.com';

// funcion que determina si el enlace es local e invoca AJAX;
function localLink(evt){
var link = evt.target || evt.srcElement;
if(/^a$/i.test(link.nodeName) && (new RegExp('^' + site_address)).test(link.href)){ 
llamarasincrono(link.href, 'barent');
try{
evt.preventDefault();
}catch(error){
evt.returnValue = false;
}}}

// aqui se usa el objeto document para aplicar el evento a todo el documento;
// pero tambien puede ser a uno o varios elementos de tu preferencia;
try{
document.addEventListener('click', localLink, false);
}catch(e){
document.attachEvent('onclick', localLink);
}
</script>
Y para aplicar la función a los enlaces lo hago así:
Código:
<a href="javascript:llamarasincrono('pagina.html', 'barent')">Enlace</a>
Tengo un código aparte que me dio ZeroKilled muy amablemente (http://www.forosdelweb.com/f13/aplicar-funcion-javascript-para-todos-enlaces-778401/) que aplica esa función a todos los links de las páginas automáticamente, aunque por desgracia y no se por qué, no a los botones. De esta forma cada vez que relleno un formulario de escribir un nuevo post y se hace click en el botón submit la página resultante que se abre (en este caso la de "Este mensaje se ha publicado correctamente...") no lo hace dentro del div 'barent'.

He probado a llamar la función directamente en el botón con el evento onClick y onSubmit así:

Código:
<input onSubmit="llamarasincrono(link.href, 'barent');" type="submit" accesskey="s" tabindex="6" name="post" class="mainoption" value="{L_SUBMIT}" />
o así:

Código:
<input onSubmit="llamarasincrono('posting.php', 'barent');" type="submit" accesskey="s" tabindex="6" name="post" class="mainoption" value="{L_SUBMIT}" />
Pero ninguna me ha resultado.



No sé mucho de Javascript ni de AJAX pero seguramente tenga fácil solución.

Muchas gracias de nuevo por vuestra ayuda.

Última edición por adhemo; 18/02/2010 a las 08:03
  #2 (permalink)  
Antiguo 17/02/2010, 05: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: Ajax, javascript y un botón "submit"

El evento onsubmit debe ir en el <form>, también, haz un return false para cancelar la acción del evento.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #3 (permalink)  
Antiguo 17/02/2010, 11:56
 
Fecha de Ingreso: febrero-2010
Mensajes: 19
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Ajax, javascript y un botón "submit"

Gracias por tu respuesta David, pero no funciona...

La etiqueta form me aparece así:

Código:
<form action="{S_POST_ACTION}" method="post" name="post" onsubmit="return checkForm(this)">
y la he modificado tal que así:

Código:
<form action="{S_POST_ACTION}" method="post" name="post" onsubmit="return checkForm(this); llamarasincrono('posting.php', 'barent');">
también he probado así:

Código:
<form action="{S_POST_ACTION}" method="post" name="post" onsubmit="return checkForm(this); llamarasincrono(link.href, 'barent');">
Ninguna de estas opciones me ha servido para que continúe cargandose en el div "barent"...
he estado probando mas cosas... y he cambiado el valor de action...

Código:
<form action="javascript:llamarasincrono('{S_POST_ACTION}', 'barent');" method="post" name="post" onsubmit="return checkForm(this)">
Y efectivamente ha cargado en el div "barent" pero devuelve error el sistema diciendo que "No se especificó un modo de mensaje" por lo que deduzco que hay algo mal, posiblemente no se envíen los datos del formulario... o no sé.

¿¿¿Cómo lo soluciono???

Última edición por adhemo; 17/02/2010 a las 12:05
  #4 (permalink)  
Antiguo 17/02/2010, 12:00
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: Ajax, javascript y un botón "submit"

Debería ser:
Código Javascript:
Ver original
  1. if checkform(this) { llamarasincrono(...); }; return false;
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #5 (permalink)  
Antiguo 17/02/2010, 13:17
 
Fecha de Ingreso: febrero-2010
Mensajes: 19
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Ajax, javascript y un botón "submit"

Nada de nada David.... :(

Código:
<form action="{S_POST_ACTION}" method="post" name="post" onsubmit="if checkform(this) { llamarasincrono(link.href, 'barent'); }; return false;">
La cosa ha quedado así pero sigue haciendo lo mismo...

Si quieres puedes probarlo y ver lo que ocurre...

http://foro.guillermocampra.com/

He configurado el primero de los foros para que puedas escribir posts sin registrarte. Verás que tengo una barrita interactiva tipo facebook, cuando envias un nuevo post desaparece porque carga el destino "posting.php" en toda la pagina y no en el DIV barent...

¿Tal vez habría que añadir algo para formuarios a la definición de la función llamarasincrono?
No tengo ni idea de qué hacer...

Etiquetas: ajax, javascript
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 05:42.