Archive for category: javascript

Jquery: Chat estilo Facebook o Gmail

Categories: javascript - Tags: ,

Yo prefiero el messenger o los sistemas de asistencia en línea pero si estás buscando algo menos complicado que no requiera instalar ningún software adicional puedes probar con este práctico chat al estilo Facebook o Gmail usando jquery.

Cuenta con algunas funciones interesantes como:

  • Mantener la conversación aunque se recargue la página
  • Opciones de minimizar y cerrar
  • Autoresize para los cuadros de texto
  • Fácil de integrar

Pueden descargarlo AQUI

Jquery: Búsqueda Instantanea parte 2

Categories: AJAX, javascript - Tags: , , ,

Como prometí aqui va la segunda parte del tutorial para búsqueda instantanea, voy a mostrar como adaptarlo a 2 páginas web distintas en el primer caso una forma simple usando la web de NeoTeo y para el segundo caso voy a hacer un Flickr Instant usando su respuesta JSON.

NeoTeo

En este caso no existe una respuesta JSON que podamos parsear y mostrar así que usaré un iframe con id “miframe” que transmita mi búsqueda y la muestre. Para ello voy a usar una sola función llamada “getTopSearchResult” la que a su vez invoca la función doneWorking que básicamente nos indica que la búsqueda fue exitosa, ya hablaré de esta más adelante.

1
2
3
4
5
function getTopSearchResult(keyword) {  
    var the_url = 'http://www.neoteo.com/tag/'+keyword+'.neo';
    doneWorking();
    $("#miframe").attr('src', the_url);
}

Flickr Instant

Flickr al igual que la gran mayoría de portales web 2.0 si ofrece resultados en formato Json, asi que voy a provecharme de esta característica para buscar resultados y luego poder mostrarlos correctamente ordenados.

Primero voy a buscar resultados con esta función:

1
2
3
4
5
function getTopSearchResult(keyword) {
     var the_url = 'http://api.flickr.com/services/feeds/photos_public.gne?tags='+encodeURIComponent(keyword)+'&format=json&jsoncallback=?';
    $.getJSON(the_url, displayImages);
    doneWorking();
}

Ahora el problema es convertir ese resultado json en algo más coherente y util para el usuario, lo que logro con la función “displayImages”

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function displayImages(data) {                                                                                                                                  // inicia la busqueda
        ////var iStart = Math.floor(Math.random()*(11));           
        // Empezamos
        var htmlString = "<ul>";                   
       
        // Mostramos resultados
        $.each(data.items, function(i,item){   
                // Decimos que muestre thumbnails cuadrados
                var sourceSquare = (item.media.m).replace("_m.jpg", "_s.jpg");     
               
                // Empezamos a mostrar uno por uno
                htmlString += '<li><a href="' + item.link + '" target="_blank">';
                htmlString += '<img src="' + sourceSquare + '" alt="' + item.title + '" title="' + item.title + '" border="0" />';
                htmlString += '</a></li>';
        });    
       
    // Finalmente llenamos el DIV
    $('#imagesWrapper').html(htmlString + "</ul>");
}

Este método es válido para cualquier resultado json de donde sea que provengam basta alterar los nombres de las variables que no siempre son link, title, etc

Ver Demo
Download

Jquery: Interactuando PHP con elementos sin recargar

Categories: AJAX, javascript - Tags: ,

Para entender este tutorial es necesario tener una mínima base de PHP y Jquery, además de haber leido este otro tutorial. Una vez que tengas todo eso claro vamos a ver como hacer que javascript responda según la respuesta que de el script PHP.


Este script se podría utilizar para verificar si un dato ha sido actualizado, verificar si encontró un registro, etc, etc. Yo por una cuestión de mantener simple el ejemplo voy a hacer que script.php genere un número aleatorio entre el 1 y el 20, si el número generado es mayor a 10 mostrará un mensaje (ganaste), de lo contrario mostrará otro mensaje, si en vez de ese else no pongo nada pues simplemente no se actualizará el DIV. Tengamos en mente que no sólo puede actualizarse un DIV es posible mostrar mensajes, cargar formularios y hacer cualquier cosa que javascript y nuestra imaginación permita.

miscript.php

1
2
3
4
5
6
<?php
/// aqui puedo hacer invocaciones a la base de datos o lo que se me ocurra
$minumero=rand(1,20);
/// retorno una respuesta
echo $minumero;
?>

Mi codigo javascript

Luego de invocar a jquery, necesitariamos el sgte. código:

1
2
3
4
5
6
7
8
9
10
11
function recargar(){   
    var variable_post="Mi texto recargado";
    $.post("miscript.php", { variable: variable_post }, function(data){
        //// Verificamos la rpta entregada por miscript.php
        if (data>10) {
            $("#recargado").html('Has ganado con un puntaje de: '+data);
        } else {
            $("#recargado").html('Has perdido con un puntaje de: '+data);
        }  
    });        
}

Observación 1: Si fuera una invocación a la base de datos puedes enviarle a javascript un valor boolena true/false para saber si se encontraron resultados.

Observación 2: Esto funciona bien con respuestas simples, si requiero devolver varias variables lo mejor es enviarlas como cadena y luego parsearlas algo como: mivariable1=algo&mivariable2=algo&mivariable3=algo… pero si necesitas recoger un gran volumen de datos como retorno lo ideal sería obtener una respuesta XML o JSON



Jquery: ocultar mostrar varios elementos

Categories: javascript - Tags: ,

Hace un tiempo publiqué un tutorial explicando como como ocultar o mostrar un elemento, pero también es posible hacerlo con múltiples elementos sin tener que agregar un script por cada elemento, para eso hay que usar id que identifiquen a los elementos y clases para conocer su estado.


Simplemente con fines didácticos he planteado el ejemplo usando el evento onclick y usando clases sin embargo es posible simplificarlo mucho más asignando el click desde jquery y no usando clases sino atributos.

El HTML de los elementos

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<div class="visible" id="item1">
    <input type="text" size="25" />
</div>
<div class="visible" id="item2">
    <input type="text" size="25" />
</div>
<div class="visible" id="item3">
    <input type="text" size="25" />
</div>
<div class="visible" id="item4">
    <input type="text" size="25" />
</div>
<div class="visible" id="item5">
    <input type="text" size="25" />
</div>
<div class="visible" id="item6">
    <input type="text" size="25" />
</div>

Es posible usar cuantos elementos se requieran y puede usarse cualquier tipo de elemento no exclusivamente div, basta que les pongamos un id y la clase que me indica su estado (visible/invisible)

Para el menu que muestra u oculta los elementos, sería el siguiente script:

1
2
3
4
5
6
7
8
<ul>
    <li><a href="#" onclick="javascript:oculta('item1')">Oculta/Muestra</a></li>
    <li><a href="#" onclick="javascript:oculta('item2')">Oculta/Muestra</a></li>
    <li><a href="#" onclick="javascript:oculta('item3')">Oculta/Muestra</a></li>
    <li><a href="#" onclick="javascript:oculta('item4')">Oculta/Muestra</a></li>
    <li><a href="#" onclick="javascript:oculta('item5')">Oculta/Muestra</a></li>
    <li><a href="#" onclick="javascript:oculta('item6')">Oculta/Muestra</a></li>
</ul>

La función para ocultar/mostrar usando jquery

Como vemos el menu invoca a una función llamada “oculta” y le envía como parámetro el id del elemento que queremos ocultar o mostrar según sea el caso, una vez que capturamos ese elemento pasamos a verificar si esta o no visible para finalmente aplicarle una pequeña animación según sea el caso.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function oculta(elemento) {
        ///// capturamos el elemento
    item=$("#"+elemento);
       ///// verificamos su estado
    if($(item).hasClass('visible')) {
        $(item).removeClass('visible');
                //// cambiamos su estado
        $(item).addClass('invisible');
                //// animamos
        $(item).slideUp('fast');
    } else {
        $(item).removeClass('invisible');
        $(item).addClass('visible');
        $(item).slideDown('fast');
    }
}

Demo

Jquery: Plugin para validar al estilo HTML5

Categories: javascript - Tags: ,

Anteriormente había hablado de un plugin de Bassistance para validar, pero esta opción me parece muy interesante ya que usa las propiedades nativas de HTML5, aunque hay algunas caracteristicas que se hacen extrañar de las que hablaré más adelante.

¿Cómo usarlo?

Lo primero es incluir el script y luego indicar que formulario debe afectar, personalmente creo que mejor es colocar un id.

1
2
3
4
5
<script>
        $(document).ready(function(){
            $('#miformulario').html5form(); // recibe un id, una clase o la etiqueta form    
        });
</script>

La forma de realizar la validación es usando las propiedades HTML5, es decir algo similar a:

1
   <input type="email" name="email" id="email"/>

¿Por qué usarlo?

Hay varios motivos:

  • Nos vamos acostumbrando a la sintaxis de HTML5
  • Incluye ciertas validaciones que no tiene el plugin de bassistance además de funciones tipo texto por defecto
  • El envío asíncrono de datos viene incluido

Puntos por pulir

  • Cuando se pega del portapapeles un texto a un textarea con un número máximo de caracteres este no se corta para validarlo
  • Los mensajes de error no son personalizables, aunque incluye por defecto mensajes en español e inglés modificables directamente sobre el código del script

Puedes ver más sobre este plugin AQUI, yo tuve problemas para acceder a dicha dirección, si no funciona en tu país usa un proxy anónimo como por ejemplo www.hidemyass.com