Diferencia entre revisiones de «Usuario:Juanda/jQuery/Plugins»
De WikiEducator
(→Reglas de validación) |
(→Consideraciones previas) |
||
(35 revisiones intermedias por el mismo usuario no mostrado) | |||
Línea 8: | Línea 8: | ||
<div class="slide"> | <div class="slide"> | ||
− | === | + | ===Consideraciones previas=== |
+ | *Se debe hacer validación tanto en cliente como en servidor. | ||
+ | *Validación en el servidor: para evitar prácticas maliciosas como sql injection | ||
+ | *Validación en cliente: por usabilidad. Tiempos de respuesta muy rápidos y liberación de trabajo al servidor. | ||
+ | </div> | ||
+ | |||
+ | <div class="slide"> | ||
+ | ===Elección del plugin=== | ||
*Localizar el plugin más adecuado para la validación de formularios desde la [http://http://plugins.jquery.com/ lista de plugins de la web de jQuery] | *Localizar el plugin más adecuado para la validación de formularios desde la [http://http://plugins.jquery.com/ lista de plugins de la web de jQuery] | ||
− | *Elegimos [http://jqueryvalidation.org/ jQuery Validation] por ser el más antiguo y popular de todos. | + | *Elegimos [http://jqueryvalidation.org/ jQuery Validation] por ser el más antiguo y popular de todos. |
− | + | ||
− | + | ||
</div> | </div> | ||
<div class="slide"> | <div class="slide"> | ||
+ | === Requerimientos Instalación === | ||
+ | *Ojo con las dependencias: jQuery, tested with 1.6.4, 1.7.2, 1.8.3, 1.9.0 | ||
+ | *En principio trabajaremos con la última versión de jQuery aunque no esté testeada. | ||
+ | *Se pueden [http://jquery.bassistance.de/validate/demo/ consultar las demos online], aunque la descarga del plugin también las incluye. | ||
+ | </div> | ||
− | + | <div class="slide"> | |
− | + | ||
− | < | + | |
− | + | ||
− | + | ||
− | + | ||
+ | === Estructura del plugin=== | ||
*Directorio dist: | *Directorio dist: | ||
:Se encuentran los scripts propios de validación. | :Se encuentran los scripts propios de validación. | ||
Línea 31: | Línea 37: | ||
*Directorio lib: | *Directorio lib: | ||
:Librerías útiles, como distintas versiones de jQuery (necesarias para el correcto funcionamiento del plugin). | :Librerías útiles, como distintas versiones de jQuery (necesarias para el correcto funcionamiento del plugin). | ||
− | :jquery.forms.js: | + | :[http://malsup.com/jquery/form/ jquery.forms.js]: Script para habilitar ajax de forma transparente en los formularios. |
− | :jquery.mockjax.js: | + | :[https://github.com/appendto/jquery-mockjax jquery.mockjax.js]: Script para simular peticiones y respuestas de ajax. |
*Directorio localization: | *Directorio localization: | ||
Línea 40: | Línea 46: | ||
*Directorio demo: | *Directorio demo: | ||
:Útil echarle un ojo, nos puede servir de ayuda para implementar nuestras soluciones. | :Útil echarle un ojo, nos puede servir de ayuda para implementar nuestras soluciones. | ||
+ | </div> | ||
+ | <div class="slide"> | ||
+ | |||
+ | ===Cargar el plugin=== | ||
+ | *Para utilizar jquery.validation, será necesario agregar previamente referencia a las librerías jQuery y jquery.validation: | ||
+ | <source lang="javascript"> | ||
+ | <script src="scripts/jquery-1.6.4.js" type="text/javascript"></script> | ||
+ | <script src="scripts/jquery.validate.js" type="text/javascript"></script> | ||
+ | </source> | ||
+ | </div> | ||
+ | |||
+ | <div class="slide"> | ||
+ | |||
+ | ===html en formularios=== | ||
+ | *Cada input del formulario lleva un label asociado | ||
+ | *El atributo for del label hace referencia al id del formulario | ||
+ | *El atributo name es necesario para el funcionamiento del plugin del formulario y es el que se utiliza en el lado del servidor (al construir la url en una petición con GET por ejemplo). | ||
+ | *Normalmente el atributo name y el atributo id suelen tener el mismo valor | ||
+ | <source lang="html4strict"> | ||
+ | <label for="firstname">Firstname</label> | ||
+ | <input id="firstname" name="fname"/> | ||
+ | </source> | ||
</div> | </div> | ||
Línea 46: | Línea 74: | ||
===Métodos de validación=== | ===Métodos de validación=== | ||
− | *Los métodos de validación | + | *Los métodos de validación son el código javascript necesario para validar los elementos. |
− | *De serie tenemos disponibles un número considerable de métodos de validación para las comprobaciones más habituales | + | *De serie tenemos disponibles un número considerable de métodos de validación para las comprobaciones más habituales. |
− | * | + | *Por ejemplo, un método de validación sería el código necesario para validar que las entradas de algunos campos sean numéricas. |
− | *Siempre es posible agregar a jquery.validation nuestras propias validaciones personalizadas. | + | *Todos los métodos de validación dan por buenos campos vacios salvo los métodos required y equalTo. |
− | * | + | </div> |
+ | |||
+ | <div class="slide"> | ||
+ | ====Métodos de validación estándar==== | ||
+ | *required – Campo requerido | ||
+ | *remote – Se solicita un recurso para chequear validez (ej. usuario que no esté ya en uso) | ||
+ | *minlength y maxlength, rangelength – Longitud del campo. | ||
+ | *min, max, range – Valor mínimo, máximo y rango | ||
+ | *email – correo electrónico válido | ||
+ | *url – url válida | ||
+ | *date – fecha | ||
+ | *dateISO – fecha ISO | ||
+ | *number – Número decimal | ||
+ | *digits – Solo digitos | ||
+ | *creditcard – Tarjeta de crédito | ||
+ | *equalTo – Valor igual a | ||
+ | </div> | ||
+ | |||
+ | <div class="slide"> | ||
+ | |||
+ | ====Añadir métodos de validación==== | ||
+ | *Siempre es posible agregar a jquery.validation nuestras propias validaciones personalizadas. | ||
+ | *Los métodos menos habituales se encuentran en la librería de additional_methods para que el script de validación pese menos. | ||
+ | *No crees varios ficheros de additional_methods para evitar excesivos request y tener una carga de página óptima. | ||
+ | *Se utiliza la función: jQuery.validator.addMethod() | ||
+ | *[http://jqueryvalidation.org/jQuery.validator.addMethod/ Consulta la API de jQuery Validation] para obtener más información | ||
</div> | </div> | ||
Línea 58: | Línea 111: | ||
*Permiten asociar un elemento de nuestro formulario a uno o más métodos de validación. | *Permiten asociar un elemento de nuestro formulario a uno o más métodos de validación. | ||
*Existen varias formas para implementar las reglas de validación que no son excluyentes entre sí. Podemos mezclaras si nos conviene. | *Existen varias formas para implementar las reglas de validación que no son excluyentes entre sí. Podemos mezclaras si nos conviene. | ||
+ | ====Mediante el uso de metadatos==== | ||
*A través de nombres de clases css en atributo class. <br/> class=”required number” especifica que nuestro elemento será requerido y sólo aceptará números.<br/> Estos nombres de clases no tienen por qué existir en tu hoja de estilos, son clases que utilizará sólo jquery.validation. | *A través de nombres de clases css en atributo class. <br/> class=”required number” especifica que nuestro elemento será requerido y sólo aceptará números.<br/> Estos nombres de clases no tienen por qué existir en tu hoja de estilos, son clases que utilizará sólo jquery.validation. | ||
<source lang="html4strict"> | <source lang="html4strict"> | ||
Línea 74: | Línea 128: | ||
</form> | </form> | ||
</source> | </source> | ||
− | *Con atributos personalizados que requieren parámetros | + | *Con atributos personalizados que requieren parámetros: |
+ | <source lang="html4strict"> | ||
+ | <input type=”text” minlength=”3”> | ||
+ | </source> | ||
+ | :Especifica que el contenido de nuestra caja de texto no debería ser menor de 3 caracteres. <br/>No es recomendable por la validación de nuestras páginas. | ||
+ | |||
+ | ====Mediante settings del plugin (opción rules) ==== | ||
*A través de código javascript y añadiendo las reglas a través del objeto rules. | *A través de código javascript y añadiendo las reglas a través del objeto rules. | ||
+ | *El código queda más limpio pero a veces es más complicado si usamos un framework web. | ||
<source lang="javascript"> | <source lang="javascript"> | ||
$("#myForm").validate({ | $("#myForm").validate({ | ||
Línea 93: | Línea 154: | ||
}); | }); | ||
</source> | </source> | ||
+ | *El método validate que se asocia al formulario, permite un paso de parámetros vía json: {parametro1: valor, parametro2: valor...} | ||
+ | *El parámetro rules define para los elementos del formulario que aparecen listados, las reglas de validación que van a tener que cumplir. | ||
</div> | </div> | ||
<div class="slide"> | <div class="slide"> | ||
+ | *Uso de comillas para parámetros no válidos como variables de JavaScript | ||
+ | <source lang="javascript"> | ||
+ | $("#myform").validate({ | ||
+ | rules: { | ||
+ | // no quoting necessary | ||
+ | name: "required", | ||
+ | // quoting necessary! | ||
+ | "user[email]": "email", | ||
+ | // dots need quoting, too! | ||
+ | "user.address.street": "required" | ||
+ | } | ||
+ | }); | ||
+ | </source> | ||
+ | </div> | ||
− | === | + | <div class="slide"> |
+ | ===Refactorizar reglas=== | ||
+ | *Si tenemos varios campos con las mismas reglas y mensajes, podemos refactorizar reglas para reducir el código | ||
+ | *Ejemplo: Tenemos varios campos que necesitan tanto required como un minlength de 2 | ||
+ | <source lang="html4strict"> | ||
+ | <input name="customer1" class="required" minlegth="2"/> | ||
+ | <input name="customer2" class="required" minlength="2"/> | ||
+ | <input name="customer3" class="required" minlegth="2"/> | ||
+ | </source> | ||
+ | *Deberíamos definir el los settings del plugin el objeto messages (de forma parecida a como se hace con el objeto rules): | ||
+ | <source lang="javascript"> | ||
+ | messages: { | ||
+ | customer1: { | ||
+ | required: "Es necesario que escribas el nombre del cliente", | ||
+ | minlenght: "Este campo tiene que tener al menos {0} caracteres" | ||
+ | }, | ||
+ | customer2: | ||
+ | ..... | ||
+ | } | ||
+ | </source> | ||
+ | *Creemos una regla de validación nueva "a nuestra medida" utilizando addMethod y addClassRules. | ||
+ | <source lang="javascript"> | ||
+ | // añadimos métodos nuevos en base a los existentes pero con otro mensaje: | ||
+ | $.validator.addMethod("cRequired", $.validator.methods.required, | ||
+ | "Es necesario que escribas el nombre del cliente"); | ||
+ | $.validator.addMethod("cMinlength", $.validator.methods.minlength, | ||
+ | $.format("Este campo tiene que tener al menos {0} caracteres")); | ||
+ | // {0} se reemplazará por el número de caracteres definidos en el parámetro de cMinlength | ||
+ | //Creamos una regla de validación como combinación de ambos métodos: | ||
+ | $.validator.addClassRules("customer", { cRequired: true, cMinlength: 2 }); | ||
+ | </source> | ||
+ | |||
+ | *Nuestro html quedaría así: | ||
+ | <source lang="html4strict"> | ||
+ | <input name="customer1" class="customer"/> | ||
+ | <input name="customer2" class="customer"/> | ||
+ | <input name="customer3" class="customer"/> | ||
+ | </source> | ||
+ | |||
+ | <source lang="javascript"> | ||
+ | $("#myform").validate({ | ||
+ | rules: { | ||
+ | // no quoting necessary | ||
+ | name: "required", | ||
+ | // quoting necessary! | ||
+ | "user[email]": "email", | ||
+ | // dots need quoting, too! | ||
+ | "user.address.street": "required" | ||
+ | } | ||
+ | }); | ||
+ | </source> | ||
</div> | </div> | ||
+ | |||
+ | |||
+ | |||
+ | <div class="slide"> | ||
+ | |||
+ | ===Mensajes de error=== | ||
+ | *Aparecen al validar un formulario, si los campos no son válidos | ||
+ | *El mensaje de error viene se puede personalizar mediante los settings del plugin | ||
+ | *Si no existe, se obtiene del title del elemento | ||
+ | *Si tampoco existe, utilizaremos los mensajes por defecto | ||
+ | |||
+ | ====errorClass y validClass==== | ||
+ | *Podemos especificar el nombre de la clase CSS que se agregará al elemento validado en caso de fracaso o de éxito de la validación. | ||
+ | |||
+ | ====errorElement, errorContainer, errorLabelContainer y wrapper==== | ||
+ | *Podemos configurar la posición y que tipo de elementos se generarán para los mensajes de error. | ||
+ | ====showErrors==== | ||
+ | *Es una función que nos permite tratar con todos los mensajes de errores encontrados para visualizar de una forma concreta o realizar la operación que creamos oportuna. | ||
+ | ====errorPlacement==== | ||
+ | Es una función que nos permite decidir donde situar los mensajes de error generados. | ||
+ | higlight y unhiglight determinan como resaltar los elementos que no han superado la validación. | ||
+ | |||
+ | </div> | ||
+ | |||
+ | <div class="slide"> | ||
+ | |||
+ | === Personalizando la validación === | ||
+ | ====submitHandler==== | ||
+ | *Nos permite especificar una función que se llamará cuando la validación haya tenido éxito. | ||
+ | *En este función podemos incluir código de validación a nivel global. | ||
+ | *Será responsabilidad nuestra enviar definitivamente el formulario con form.submit(). | ||
+ | ====invalidHandler ==== | ||
+ | *es una función que se llamará si la validación no ha tenido éxito. | ||
+ | *Con ignore podemos especificar un selector jQuery para ignorar campos de nuestro formulario. | ||
+ | ====onsubmit, onfocus, onkeyup, onclick==== | ||
+ | *Nos permiten decidir cuándo se realizará la validación. | ||
+ | |||
</div> | </div> | ||
Línea 106: | Línea 270: | ||
= Datagrid = | = Datagrid = | ||
+ | </div> | ||
+ | <div class="slide"> | ||
+ | ===Introducción=== | ||
+ | *Un componente esencial en una aplicación web es el datagrid. | ||
+ | *Hay muchas opciones diferentes, nos centraremos en plugins que funcionen sobre jQuery, para seguir la dinámica del curso: | ||
+ | :[http://flexigrid.info/ Flexigrid] | ||
+ | :[http://www.trirand.com/ jqGrid] | ||
+ | :[http://www.datatables.net/ DataTables] | ||
+ | *Elegimos DataTablas debido a: | ||
+ | :Excelente documentación: ejemplos de uso, foro | ||
+ | :Versatilidad: funcionamiento en cliente o cliente-servidor | ||
+ | :Aspecto visual: posibilidad de integrarlo con jQueryUI o con Twitter Bootstrap (que veremos más adelante en el módulo de Diseño de Interfaces Web). | ||
+ | </div> | ||
+ | <div class="slide"> | ||
+ | ===Funcionamiento básico=== | ||
+ | *Necesitamos un documento html que contenga una tabla. | ||
+ | *Se carga el script de jQuery | ||
+ | *Se cargan los ficheros del plugin de DataTables: | ||
+ | <source lang="html4strict"> | ||
+ | <script type="text/javascript" src="js/jquery.js"></script> | ||
+ | <script type="text/javascript" src="js/jquery.dataTables.js"></script> | ||
+ | </source> | ||
+ | *Se asocia la tabla con el plugin mediante la llamada al método dataTable(). | ||
+ | <source lang="html4strict"> | ||
+ | <script type="text/javascript" charset="utf-8"> | ||
+ | $(document).ready(function() { | ||
+ | $('#miTabla').dataTable(); | ||
+ | } ); | ||
+ | </script> | ||
+ | </source> | ||
+ | </div> | ||
+ | <div class="slide"> | ||
+ | |||
+ | ===Funcionamiento más avanzado=== | ||
+ | *El método DataTables puede recibir parámetros: | ||
+ | <source lang="html4strict"> | ||
+ | $(document).ready(function() { | ||
+ | $('#example').dataTable( { | ||
+ | "aaSorting": [[ 4, "desc" ]] | ||
+ | } ); | ||
+ | } ); | ||
+ | </source> | ||
+ | *En el caso anterior ordenará por la cuarta columna y de modo descendente | ||
+ | *Realmente recibe un solo parámetro que es un json, muy similar al plugin de validación que acabamos de ver. | ||
+ | *La mejor forma de ver como personalizar nuestro DataTables es ver los [http://www.datatables.net/examples/ distintos ejemplos] que abarcan todas las posibilidades del plugin. | ||
</div> | </div> |
Última revisión de 12:35 23 ene 2014