Diferencia entre revisiones de «Usuario:Juanda/jQuery/Plugins»
De WikiEducator
(→Métodos de validación) |
(→Consideraciones previas) |
||
(30 revisiones intermedias por el mismo usuario no mostrado) | |||
Línea 9: | Línea 9: | ||
<div class="slide"> | <div class="slide"> | ||
===Consideraciones previas=== | ===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> | ||
<div class="slide"> | <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 class="slide"> | ||
+ | === Requerimientos Instalación === | ||
*Ojo con las dependencias: jQuery, tested with 1.6.4, 1.7.2, 1.8.3, 1.9.0 | *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> | ||
<div class="slide"> | <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 37: | 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 46: | 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> | ||
<div class="slide"> | <div class="slide"> | ||
+ | |||
===html en formularios=== | ===html en formularios=== | ||
*Cada input del formulario lleva un label asociado | *Cada input del formulario lleva un label asociado | ||
*El atributo for del label hace referencia al id del formulario | *El atributo for del label hace referencia al id del formulario | ||
− | *El atributo name es necesario para el funcionamiento del plugin 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 | *Normalmente el atributo name y el atributo id suelen tener el mismo valor | ||
<source lang="html4strict"> | <source lang="html4strict"> | ||
Línea 64: | 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. | ||
+ | *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> | ||
<div class="slide"> | <div class="slide"> | ||
+ | |||
====Añadir métodos de validación==== | ====Añadir métodos de validación==== | ||
*Siempre es posible agregar a jquery.validation nuestras propias validaciones personalizadas. | *Siempre es posible agregar a jquery.validation nuestras propias validaciones personalizadas. | ||
Línea 84: | 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 100: | 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 124: | Línea 159: | ||
<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 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==== | ====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. | *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==== | ====errorElement, errorContainer, errorLabelContainer y wrapper==== | ||
*Podemos configurar la posición y que tipo de elementos se generarán para los mensajes de error. | *Podemos configurar la posición y que tipo de elementos se generarán para los mensajes de error. | ||
Línea 146: | Línea 250: | ||
</div> | </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 152: | 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