jueves, 27 de noviembre de 2014

Entendamos el plugin textarea con contador de caracteres - II

El código está comentado para que se pueda entender mejor. Quizás nos pueda llamar más la atención la línea donde se utiliza la función jQuery para generar sobre la marcha un objeto jQuery con el campo DIV con el que vamos a seguir la cuenta. Vemos que a través del método attr() accedemos al value del textarea y con la propiedad length a su longitud en caracteres.

var contador = $('<div>Contador caracteres: ' + elem.attr("value").length + '</div>');
Luego también puede que nos llame la atención el funcionamiento del método data(), que nos permite almacenar y recuperar datos que se guardarán en el propio objeto jQuery de cada textarea.
Así guardo una referencia al objeto con la capa contador en el textarea, en un dato llamado "campocontador".
elem.data("campocontador", contador);
Y con este otro código en el evento recupero esa capa, pues luego en el evento tengo que cambiar el contenido con la cuenta de caracteres actualizada.
var campocontador = elem.data("campocontador");
Una vez creado el plugin, convierto todos los textareas en textareas-contador de caracteres, con este código:
$(document).ready(function(){
$("textarea").cuentaCaracteres();
})

Eso es todo, pero quizás se vea más claro si vemos el código completo del ejemplo.
<html>
<head>
<title>Creando plugins en jQuery</title>
<script src="../jquery-1.4.1.min.js"></script>
<script>
//creo el plugin cuentaCaracteres
jQuery.fn.cuentaCaracteres = function() {
//para cada uno de los elementos del objeto jQuery
this.each(function(){
//creo una variable elem con el elemento actual, suponemos un textarea
elem = $(this);
//creo un elemento DIV sobre la marcha
var contador = $('<div>Contador caracteres: ' + elem.attr("value").length + '</div>');
//inserto el DIV después del elemento textarea
elem.after(contador);
//guardo una referencia al elemento DIV en los datos del objeto jQuery
elem.data("campocontador", contador);
//creo un evento keyup para este elemento actual
elem.keyup(function(){
//creo una variable elem con el elemento actual, suponemos un textarea
var elem = $(this);
//recupero el objeto que tiene el elemento DIV contador asociado al textarea
var campocontador = elem.data("campocontador");
//modifico el texto del contador, para actualizarlo con el número de caracteres escritos
campocontador.text('Contador caracteres: ' + elem.attr("value").length);
});
});
//siempre tengo que devolver this
return this;
};
$(document).ready(function(){
$("textarea").cuentaCaracteres();
})
</script>
</head>
<body>
<form>
<textarea rows=5 cols=30 id="mitextarea">hola</textarea>
<br>
<br>
<textarea rows=5 cols=30 id="otrotextarea">Otra cuenta...</textarea>
</form>
</body>
</html>

No hay comentarios:

Publicar un comentario