Foros del Web » Programando para Internet » Jquery »

(jQuery) - ¿Qué hago mal? textarea y .load()

Estas en el tema de (jQuery) - ¿Qué hago mal? textarea y .load() en el foro de Jquery en Foros del Web. hola, llevo ya unas cuantas horas con esto y pido papas. la historia es enviar una variable por get a un script php para que ...
  #1 (permalink)  
Antiguo 02/11/2010, 16:04
Avatar de uikekarallo  
Fecha de Ingreso: diciembre-2009
Ubicación: Galicia
Mensajes: 338
Antigüedad: 15 años
Puntos: 16
(jQuery) - ¿Qué hago mal? textarea y .load()

hola, llevo ya unas cuantas horas con esto y pido papas.

la historia es enviar una variable por get a un script php para que inserte los datos en una db, el div se recargaría de forma asíncrona y tendría una bonita especie de chatbox/guestbook.

os dejo el código a ver si me podéis ayudar.

Código PHP:
        var usuario = $('#nombreUsuario').val();
        var 
comentario = $('.textoComentario').val();
        var 
enviarComentario = $('.enviarComentario');

        
enviarComentario.click(function()
        {
            if( !
comentario )
            {
                return 
false;
            }
            else
            {
                $(
'.cargaComentarios').load('scripts/nuevoComentario.php?nick='usuario +'&comentario='comentario.replace(/ /g,"\+") , function()
                {
                    $(
'.cargaComentarios').load('index.php .cargaComentarios');
                })
            }
        }); 
lo gracioso, es que cuando lo hice de primeras funcionaba! así que no entiendo que pasa ni por aproximación.. es algo que tengo en el index, y cuando lo acabé seguí a lo mío con el resto de la página web... y cuando tengo ya casi todo terminado,, quiero probar de nuevo y ya no funciona no sé que puede influir... quité el resto de código js que tengo y no soluciono...

var comentario = $('.textoComentario').val(); no me recoge nada cuando antes sí lo hacía. qué podría ser?

el .load() tampoco lo ejecuta, ni aún quitando ese if. ya no cabe decir que no llega hasta el php. y hace ~5 horas funcionaba... x_x

alguna idea¿? gracias!!
  #2 (permalink)  
Antiguo 02/11/2010, 18:01
Avatar de uikekarallo  
Fecha de Ingreso: diciembre-2009
Ubicación: Galicia
Mensajes: 338
Antigüedad: 15 años
Puntos: 16
Respuesta: (jQuery) - ¿Qué hago mal? textarea y .load()

soy un impaciente... arrojemos más código....

Código PHP:
            <div id="cargaComentarios">
                        <?php
              $peticion 
"select * from comentarios order by id asc limit 200";
              
$datos mysql_query($peticion);
              
              while( 
$fdatos mysql_fetch_array($datos) )
              {
                echo 
'<p><strong>'.$fdatos['nick'].':</strong> '.$fdatos['comentario'];
              }
            
?>
          </div>
        </div>
        <input type="hidden" id="nombreUsuario" value="<?php echo $_SESSION['usuario']; ?>" />
        <p><textarea class="textoComentario" <?php if( $_SESSION['usuario'] == "invitado" ){ echo 'disabled="disabled"'; } ?>><?php if( $_SESSION['usuario'] == "invitado" ){ echo 'Sólo los usuarios registrados pueden escribir mensajes.'; } ?></textarea></p>
        <p><input class="boton enviarComentario" <?php if( $_SESSION['usuario'] == "invitado" ){ echo 'disabled="disabled"'; } ?> type="button" value="" /></p>
ese es el trozo del index.php donde están los inputs y el botón de envío que enlazan al script js de antes.

a ver si alguien ve algo que yo no veo un saludo
  #3 (permalink)  
Antiguo 02/11/2010, 18:44
 
Fecha de Ingreso: diciembre-2009
Ubicación: Misiones
Mensajes: 867
Antigüedad: 15 años
Puntos: 65
Respuesta: (jQuery) - ¿Qué hago mal? textarea y .load()

le estas diciendo a load que te cargue el contenido en un elemento con clase "cargaComentarios"

pero en tu html no tenes nada con clase cargaComentarios, pero si tenes un div con id cargaComentarios, mejor seria que a load le digas que cargue en ese div

$('#cargaComentarios').load jeje


si arreglas eso te va a funcionar pero vas a tener un problema, cuando llamas a load va a cargar en el div, pero en la segunda también por lo que va a sobreescribir

hace con get

Código Javascript:
Ver original
  1. $.get('primera.php' , function(datos){
  2.     $('#cargaComentarios').html(datos);
  3.     $.get('segunda.php' , function(datos){
  4.         $('#cargaComentarios').append(datos);
  5.     });
  6. });

llamas a la primera paginas para traer datos, en el callback lo agregas al div, y llamas a la seguda y en el callback de esa agregas al div con append


pero mejor seria que envies el comentario a la db y que si inserta te devuelva true o false, si es true lo agregas al div, solo el valor de el/los campos y no traer todo un html completo

y ya que estamos podrias llamar a los comentarios de la db con ajax también pero al ingresar a la página

en vez de

Código PHP:
Ver original
  1. <?php
  2.               $peticion = "select * from comentarios order by id asc limit 200";
  3.               $datos = mysql_query($peticion);
  4.              
  5.               while( $fdatos = mysql_fetch_array($datos) )
  6.               {
  7.                 echo '<p><strong>'.$fdatos['nick'].':</strong> '.$fdatos['comentario'];
  8.               }
  9.             ?>

traer eso con ajax, en un formato json o xml :)

Última edición por Dany_s; 02/11/2010 a las 18:50
  #4 (permalink)  
Antiguo 03/11/2010, 08:47
Avatar de uikekarallo  
Fecha de Ingreso: diciembre-2009
Ubicación: Galicia
Mensajes: 338
Antigüedad: 15 años
Puntos: 16
Respuesta: (jQuery) - ¿Qué hago mal? textarea y .load()

uuhhmmm gracias! está claro que a veces es mejor dejar las cosas para el día siguiente ^^

ni se me había pasado por la cabeza utilizar get(). gracias de nuevo sobre todo por molestarte, pero ahora que he visto los errores ya funciona como lo tengo puesto

ya sólo queda una cosa por solucionar: no logro recoger el valor del textarea. si hago un alert me devuelve un cuadro vacío (''). intento recogerlo con

Cita:
var comentario = $('.textoComentario').val();
pero no funciona, y con text() tampoco :/

al final, me ha quedado así:

Código PHP:
        usuario = $('#nombreUsuario').val();
        
comentario = $('.textoComentario').val();
        
enviarComentario = $('.enviarComentario');

        
enviarComentario.click(function()
        {
            if( !
comentario )
            {
                return 
false;
            }
            else
            {
                $(
'.comentariosDinamicos').load('scripts/nuevoComentario.php?nick='usuario +'&comentario='comentario.replace(/ /g,"\+") , function()
                {
                    $(
'.comentariosDinamicos').load('index.php #cargaComentarios');
                })
            }
        }); 
mil gracias más porque no veía los errores... ahora sólo queda el detalle del textarea. una ayudita más, por favor!!

saludos!

Última edición por uikekarallo; 03/11/2010 a las 08:58
  #5 (permalink)  
Antiguo 03/11/2010, 09:51
 
Fecha de Ingreso: diciembre-2009
Ubicación: Misiones
Mensajes: 867
Antigüedad: 15 años
Puntos: 65
Respuesta: (jQuery) - ¿Qué hago mal? textarea y .load()

y esto
comentario = $('.textoComentario').val();

donde lo tienes, dentro del ready?

porque no es lo mismo esto

Código HTML:
Ver original
  1.     <head>
  2.         <title>Ejemplon</title>
  3.         <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
  4.     </head>
  5.         <script type="text/javascript">
  6.  
  7.           function mostrar(){
  8.               alert($('.textoComentario').val());
  9.           }
  10.         </script>
  11.  
  12.     <body>
  13.         <textarea class="textoComentario" onclick="mostrar()" >fffff</textarea>
  14.     </body>
  15. </html>

que esto

Código HTML:
Ver original
  1.     <head>
  2.         <title>Ejemplon</title>
  3.         <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
  4.     </head>
  5.         <script type="text/javascript">
  6.               alert($('.textoComentario').val());
  7.         </script>
  8.  
  9.     <body>
  10.         <textarea class="textoComentario">fffff</textarea>
  11.     </body>
  12. </html>

o que esto

Código HTML:
Ver original
  1.     <head>
  2.         <title>Ejemplon</title>
  3.         <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
  4.     </head>
  5.         <script type="text/javascript">
  6.            $( function(){
  7.                 alert($('.textoComentario').val());
  8.            });
  9.         </script>
  10.     <body>
  11.         <textarea class="textoComentario">fffff</textarea>
  12.     </body>
  13. </html>
  14. </html>

y si vas a acceder a un campo de formulario te conviene usar id, porque si usas clases por ahi usas esa misma clase para otro campo, y ademas con un id no tiene que recorrer todos los elementos
  #6 (permalink)  
Antiguo 04/11/2010, 08:09
Avatar de uikekarallo  
Fecha de Ingreso: diciembre-2009
Ubicación: Galicia
Mensajes: 338
Antigüedad: 15 años
Puntos: 16
Respuesta: (jQuery) - ¿Qué hago mal? textarea y .load()

bueeno.. al fin

sí, lo tenía directamente dentro del ready. y me recogía el valor utilizando $('.textoComentario'); pero si lo metía en una variable [comentario = $('.textoComentario');] ya no funcionaba. al final he hecho lo siguiente:

Código PHP:
        // ready...

        
usuario = $('#nombreUsuario').val();
        
enviarComentario = $('.enviarComentario');

        
enviarComentario.click(function()
        {
            if( $(
'#textoComentario').val() != "" )
            {
                
comentario = $('#textoComentario').val().replace(/ /"\+");

                $(
'.comentariosDinamicos').load('scripts/nuevoComentario.php?nick='usuario +'&comentario='comentario , function()
                {
                    $(
'.comentariosDinamicos').load('index.php #cargaComentarios');
                    $(
'#textoComentario').val('');
                    $(
'#textoComentario').focus();
                });
            }
        }); 
como ves ya he cambiado las clases por ids (que aunque no utilizaba esas clases en nada más, no me di cuenta de que claro, si pongo una clase tiene que recorrer el documento...).
ahora faltan algunos detalles, como evitar palabas mal sonantes y esas cosas de chat ^^

dany, un millón de gracias!! investigando un poco también he aprendido a diferenciar los 3 ejemplos que me has puesto. así que tu ayuda ha sido inestimable

un saludo!!
  #7 (permalink)  
Antiguo 04/11/2010, 08:23
 
Fecha de Ingreso: diciembre-2009
Ubicación: Misiones
Mensajes: 867
Antigüedad: 15 años
Puntos: 65
Respuesta: (jQuery) - ¿Qué hago mal? textarea y .load()

ah bien, eso no vi, no me habia dado cuenta que usabas eso para enviar

la explicación es porque al hacer

variable = $('#textoComentario').val()

toma el valor cuando se carga el documento, pero al cargar va a recuperar el value si, pero es un vacio jeje asi que en el load la variable tiene nada jeje

val() retorna un string
si vas a ocupar ese campo en diferentes lugares podes hacer


variable = $('#textoComentario');

y para recuperar el value haces
variable.val()
porque
$('#textoComentario') retorna el objeto

al tener el objeto en la variable podes hacer cuanquier cosa, variable.remove(), variable.attr('class'), etc
  #8 (permalink)  
Antiguo 04/11/2010, 09:42
Avatar de uikekarallo  
Fecha de Ingreso: diciembre-2009
Ubicación: Galicia
Mensajes: 338
Antigüedad: 15 años
Puntos: 16
Respuesta: (jQuery) - ¿Qué hago mal? textarea y .load()

jeje, ahora lo entiendo y tiene todo el sentido del mundo... estaba recogiendo directamente el valor en lugar del objeto pero al cargar la página, lo cual siempre estaba vacío. lo he entendido ^^

pues con este último retoque... el código queda así:

Código PHP:
    // ready...

        
= $('#cargaComentarios').innerHeight();

        
usuario = $('#nombreUsuario').val();
        
comentario = $('#textoComentario');
        
enviarComentario = $('.enviarComentario');

        
enviarComentario.click(function()
        {
            if( 
comentario.val() != "" )
            {
                
comentario_fix comentario.val().replace(/ /"\+");

                $(
'.comentariosDinamicos').load('scripts/nuevoComentario.php?nick='usuario +'&comentario='comentario_fix , function()
                {
                    $(
'.comentariosDinamicos').load('index.php #cargaComentarios' , function(){ $('.comentariosDinamicos').scrollTop(y); } );
                    
comentario.val('');
                    
comentario.focus();
                });
            }
        }); 
gracias, gracias y gracias otra vez. ahora me gusta mucho más como queda, se ve más limpio
  #9 (permalink)  
Antiguo 04/11/2010, 09:58
 
Fecha de Ingreso: diciembre-2009
Ubicación: Misiones
Mensajes: 867
Antigüedad: 15 años
Puntos: 65
Respuesta: (jQuery) - ¿Qué hago mal? textarea y .load()

para que quede mas limpio podes aprovechar lo que devuelve cada método

si te fijas en la doc de cada metodo siempre en la parte azul que está abajo del título muestra los parámetros que hacepta y del lado derecho lo que retorna

.focus( handler(eventObject) )>>>>>>>>>>>Returns: jQuery

te devuelve el mismo objeto, entonces podes usarlo para hacer encadenamiento

en vez de
comentario.focus();
comentario.val('');

en una sola linea
comentario.focus().val('');

si es una linea larga encadenada por ahi queda feo pero se ve legible cuando hacen por linea

comentario
.focus()
.algunMetodo()
.otro()
.otroMas();

en php orientado a objetos seria como una interfz fluida
$instancia->hacerAlgo('bla')->hacerOtraCosa()->tambienOtra('asd');
  #10 (permalink)  
Antiguo 04/11/2010, 20:28
Avatar de uikekarallo  
Fecha de Ingreso: diciembre-2009
Ubicación: Galicia
Mensajes: 338
Antigüedad: 15 años
Puntos: 16
Respuesta: (jQuery) - ¿Qué hago mal? textarea y .load()

jeje, si, si ya me lo pone bien claro en el libro de Aprende jQuery... pero a veces estoy tan absorto que no me doy cuenta de que puedo simplificar las cosas. supongo que poco a poco iré haciendo progresos ^^

un saludo!

Etiquetas: load, mal, textarea
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 23:29.