JavaScript - funciones cookie

 
Vista:
sin imagen de perfil

funciones cookie

Publicado por javier (29 intervenciones) el 17/11/2016 22:34:08
Buenas

Tengo estas dos funciones para guardar cookie y leer cookie:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function setCookie(cname,cvalue,exdays) {
  var d = new Date();
  d.setTime(d.getTime()+(exdays*24*60*60*1000));
  var expires = "expires="+d.toGMTString();
  document.cookie = cname + "=" + cvalue + "; " + expires;
}
 
 
function getCookie(cname) {
 var name = cname + "=";
 var ca = document.cookie.split(';');
 for(var i=0; i<ca.length; i++)    {
   var c = ca[i].trim();
   if (c.indexOf(name)==0) return   c.substring(name.length,c.length);
  }
 return "";
}

La cuestion es que quiero guardar el valor del input de un formulario cuando escribo en una cookie, he hecho lo siguiente

por ejemplo en la siguiente funcion, hago una llamado a setCookie
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
function validarNombre(valor) {
 
 
    if (valor.length >= 3 && valor.length <= 20)
    {
 
        var re = /^[^0-9]/;
 
        if (valor[0].match(re))
 
        {
 
            document.getElementById("area").innerHTML = valor;
 
        } else {
 
            document.getElementById("area").innerHTML = "No puede  empezar por un numero";
 
        }
 
    } else {
 
        document.getElementById("area").innerHTML = "Tiene que tener entre 3 y 20 caracteres";
 
    }
 
    setCookie("cookieCodigo",valor, 20 );
}

luego fuera de la funcion he hecho lo siguiente:

1
2
var nombre= getCookie("cookieCodigo");
document.getElementById("texto").value=nombre;

he comprobado rellenando el input del nombre , luego borrando y recargando la pagina pero no me guarda el valor¿que estoy haciendo mal?

Un saludo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

funciones cookie

Publicado por javier (29 intervenciones) el 18/11/2016 08:59:11
El ejercicio pide:

5. Programa con JavaScript que al clicar sobre Guardar Datos se guarden todos
los datos de los inputs en una cookie para cada input. Pej: para el input inputNombre
crea una cookie que guarde su valor, para el input inputCodigo crea otra cookie con su valor, etc...)


6. Programa con JavaScript que al clicar sobre Recupera Datos se sustituya
* el valor de los inputs por el valor almacenado en su correspondiente cookie.

Aqui el codigo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
<!DOCTYPE html>
<!--
To change this license header, choose License Headers in Project Properties.
To change this template file, choose Tools | Templates
and open the template in the editor.
-->
<html>
    <head>
        <title>TODO supply a title</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <script src="formulario.js" type="text/javascript"></script>
        <link rel="stylesheet" href="./formulario.css" type="text/css">
    </head>
    <body>
        <form name="formulario" method="post" action="ejemplo.php"  onsubmit="validarFecha();validaCheckbox();">
            Nombre Producto: <input type ="text" id="texto" name="nombre" placeholder="Nombre" size ="30" onkeyup="validarNombre(this.value)" /> <br/>
            Codigo de Barras:<input type="text" id="codigo" name="codigo" placeholder="codigo" size="15" onkeyup="validaCodigo(this.value)" /> <br/>
            Caducidad dia : <input type="text"  id="dia" name="dia" placeholder="Dia" size="5" />
            mes :<input type ="text" name="mes" id="mes" placeholder ="Mes" size ="5" />
            año :<input type="text" name="año" id="anio" placeholder="Año" size="5" /> <br/>
 
            <p>
                Oferta :
                <select  id="ofertas">
                    <option value="1">Normal</option>
                    <option value="2">2x1</option>
                    <option value="3">20%</option>
                    <option value="4">10%</option>
 
                </select>
            </p>
            Congelado  <input type="checkbox" name ="alimentos" id ="checkbox1"/>
            Fruta <input type="checkbox" name = "alimentos" id="checkbox2"/>
            Snack<input  type="checkbox" name ="alimentos" id="checkbox3"/><br/>
 
            <input class="boton" type ="submit" name="registrate" value="Registrate" />
            <input class="boton" type="button" name="limpiar" value="Limpia el formulario"/>
            <input class="boton" type="button" name="guardar " value="Guardar datos" />
            <input class="boton" type="button" name="recuperar" value="Recuperar datos" /><br/>
 
            <textarea id ="area" rows="2" cols="50">
            TextArea con la información del formulario
 
            </textarea>
 
 
        </form>
 
    </body>
</html>
 
/* 
 ejercicio 3
 Controla que si no se selecciona algún tipo de alimento 
 (Congelado, Fruta o Snak) no se envíe el formulario al clicar en Regístrate
 
 */
function validaCheckbox() {
    todos = document.getElementsByTagName('input');//hago una funcion y con un bucle 
    //recorre todos los elementos
//por orden y etiqueta
    for (x = 0; x < todos.length; x++) {
        if (todos[x].checked) {
 
            return true;
        }
    }
    alert("Al menos debe marcar congelado o fruta o snack");
    return false;
}
 
 
 
 
/*Ejercicio 4
 * 4.	Controla que cada vez que el usuario escribe una letra en un input se 
 * muestre un mensaje en el TextArea con el valor del input y si su valor es válido.
 /*escribe una letra en un input se muestre un mensaje en el TextArea con el valor del input */




/* b.   InputNombre  no puede empezar por un número y debe contener entre 3 y 20 
 * caracteres.*/
 
function validarNombre(valor) {
 
 
    if (valor.length >= 3 && valor.length <= 20)
    {
 
        var re = /^[^0-9]/;
 
        if (valor[0].match(re))
 
        {
 
            document.getElementById("area").innerHTML = valor;
 
        } else {
 
            document.getElementById("area").innerHTML = "No puede  empezar por un numero";
 
        }
 
    } else {
 
        document.getElementById("area").innerHTML = "Tiene que tener entre 3 y 20 caracteres";
 
    }
 
    setCookie("cookieNombre",valor, 20 );
}
 
 
 
/*c.     InputCodigo debe tener 13 números, ninguna letra (puedes utilizar una
 expresión regular para validar).*/
 
 
function validaCodigo(valor) {
 
 
    if (/\b\d{13}\b/.test(valor)) {
 
        document.getElementById("area").innerHTML = valor;
 
    } else {
 
        document.getElementById("area").innerHTML = "Solo pueden ser 13 numeros";
    }
 
 
 
}
 
 
 
/*d.	InputDia , inputMes y inputAno deben formar una fecha válida.*/
 
function validarFecha() {
 
    var day = document.getElementById("dia").value;
    var month = document.getElementById("mes").value;
    var year = document.getElementById("anio").value;
 
   var dteDate;
   month=month-1;
   dteDate=new Date(year,month, day);
   return ((day ==dteDate.getDate()) && (month==dteDate.getMonth()) && (year==dteDate.getFullYear()));
 
}
 
 
 
 
 
 
/*
 *  5.	Programa con JavaScript que al clicar sobre Guardar Datos se guarden todos
 los datos de los inputs en una cookie para cada input. Pej: para el input inputNombre 
 crea una cookie que guarde su valor, para el input inputCodigo crea otra cookie con su valor, etc...)
 * 
 */
 
 
function setCookie(cname,cvalue,exdays) {
  var d = new Date();
  d.setTime(d.getTime()+(exdays*24*60*60*1000));
  var expires = "expires="+d.toGMTString();
  document.cookie = cname + "=" + cvalue + "; " + expires;
}
 
 
 
 
 
 
 
/* 6.	Programa con JavaScript que al clicar sobre Recupera Datos se sustituya
 *  el valor de los inputs por el valor almacenado en su correspondiente cookie.
 * 
 */
function getCookie(cname) {
 var name = cname + "=";
 var ca = document.cookie.split(';');
 for(var i=0; i<ca.length; i++)    {
   var c = ca[i].trim();
   if (c.indexOf(name)==0) return
   c.substring(name.length,c.length);
  }
 return "";
 }
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve
Val: 3.162
Oro
Ha mantenido su posición en JavaScript (en relación al último mes)
Gráfica de JavaScript

funciones cookie

Publicado por xve (2100 intervenciones) el 18/11/2016 09:16:08
Hola Javi, he puesto el nombre, y he revisado las cookies en el navegador... y ahí he visto que se ha creado la cookie.

En tu código, en ningún momento llamas a la función para cargar la cookie al iniciar para cargar los datos de la cookie.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

funciones cookie

Publicado por javier (29 intervenciones) el 18/11/2016 12:00:15
Hola
Desde donde llamaria a la funcion?
Y otra cosa el profesor nos ha comentado lo siguiente:



Muy buenas,

Os adjunto un código de ejemplo (hay que eliminar el espacio delante de cada tag html para que funcione). El ejemplo al iniciar la web modifica el valor del input y del textarea para que contengan unos valores arbitrarios de 1 y 33. Luego vincula un evento en el input para que al clicar se muestre por consola el contenido del input.

Espero que el ejemplo os sirva para ver:

como obtener el contenido del input cada vez que el usuario escribe
como introducir un valor dentro de un input y dentro de un textarea (es de la misma manera)
como acceder a los distintos elementos del formulario. Fijaros que como vimos, para acceder a los elementos del formulario utilizamos document.forms, no document.getElementById .

Hay otras maneras de realizar el ejercicio, no quiere decir que ésta sea la única correcta. Pero evitar utilizar document.getElementById en éste ejercicio para acceder a los elementos de un formulario o al formulario mismo.

Por último, recordar que podéis utilizar funciones de String (como substr) para rectortar cadenas de texto.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
< script>  //vinculamos un load al documento, para que se ejecute la funcion "ini" una vez cargado todo el documento
            window.addEventListener("load", ini, false);
            function ini() {
                document.forms["form1"]["nombre"].value = "1";
                document.forms["form1"]["area"].value = "33";
                document.forms["form1"]["nombre"].addEventListener("keyup", haTecleado, false);  //cuando el usuario deje de clicar en una tecla, se ejecuta el evento
 
            }
 
            function haTecleado() { //cada vez que el usuario ha tecleado, obtengo el valor del input.
                var textoTecleado = document.forms["form1"]["nombre"].value;
                console.log("input nombre contiene:" + textoTecleado);
            }
        < /script>
        < form name="form1">
            < input type="text" name="nombre" />
            < textarea name="area">
 
            < /textarea>
        < /form>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

funciones cookie

Publicado por javier (29 intervenciones) el 18/11/2016 12:41:53
¿tu cambiarias algo del codigo que llevo?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

funciones cookie

Publicado por javier (29 intervenciones) el 18/11/2016 18:18:51
Parece ser que para acceder a los elementos hay que hacerlo mejor con document,form. Pero claro tendria que cambiar todo el ejercicio,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

funciones cookie

Publicado por javier (29 intervenciones) el 19/11/2016 15:17:12
Cuando relleno los input si me guarda los valores en cookie, pero no necesito darle al boton guardar. he adjuntado capturas y el codigo es este



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
/* 
 ejercicio 3
 Controla que si no se selecciona algún tipo de alimento 
 (Congelado, Fruta o Snak) no se envíe el formulario al clicar en Regístrate
 
 */
function validaCheckbox() {
    todos = document.getElementsByTagName('input');//hago una funcion y con un bucle 
    //recorre todos los elementos
//por orden y etiqueta
    for (x = 0; x < todos.length; x++) {
        if (todos[x].checked) {
 
            return true;
        }
    }
    alert("Al menos debe marcar congelado o fruta o snack");
    return false;
 
}
 
 
 
 
/*Ejercicio 4
 * 4.	Controla que cada vez que el usuario escribe una letra en un input se 
 * muestre un mensaje en el TextArea con el valor del input y si su valor es válido.
 /*escribe una letra en un input se muestre un mensaje en el TextArea con el valor del input */




/* b.   InputNombre  no puede empezar por un número y debe contener entre 3 y 20 
 * caracteres.*/
 
function validarNombre(valor) {
 
 
    if (valor.length >= 3 && valor.length <= 20)
    {
 
        var re = /^[^0-9]/;
 
        if (valor[0].match(re))
 
        {
 
            document.getElementById("area").innerHTML = valor;
 
        } else {
 
            document.getElementById("area").innerHTML = "No puede  empezar por un numero";
 
        }
 
    } else {
 
        document.getElementById("area").innerHTML = "Tiene que tener entre 3 y 20 caracteres";
 
 
    }
 
    setCookie("nombreCookie", valor, 30);
    var comprobar = getCookie("nombreCookie");
 
}
 
 
 
 
 
/*c.     InputCodigo debe tener 13 números, ninguna letra (puedes utilizar una
 expresión regular para validar).*/
 
 
function validaCodigo(valor) {
 
 
    if (/\b\d{13}\b/.test(valor)) {
 
        document.getElementById("area").innerHTML = valor;
 
    } else {
 
        document.getElementById("area").innerHTML = "Solo pueden ser 13 numeros";
    }
 
    setCookie("codigoCookie", valor, 30);
    var resul = getCookie("codigoCookie");
}
 
 
 
/*d.	InputDia , inputMes y inputAno deben formar una fecha válida.*/
 
function validarFecha() {
 
    var day = document.getElementById("dia").value;
    setCookie("diaCookie", day, 50);
 
 
    var month = document.getElementById("mes").value;
    setCookie("mesCookie", month, 50);
 
 
 
    var year = document.getElementById("anio").value;
    setCookie("anioCookie", year, 50);
 
 
 
    var dteDate;
    month = month - 1;
    dteDate = new Date(year, month, day);
    return ((day === dteDate.getDate()) && (month === dteDate.getMonth()) && (year === dteDate.getFullYear()));
 
}
 
 
 
 
 
 
/*
 *  5.	Programa con JavaScript que al clicar sobre Guardar Datos se guarden todos
 los datos de los inputs en una cookie para cada input. Pej: para el input inputNombre 
 crea una cookie que guarde su valor, para el input inputCodigo crea otra cookie con su valor, etc...)
 * 
 */
 
 
function setCookie(cname, cvalue, exdays) {
    var d = new Date();
    d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
    var expires = "expires=" + d.toGMTString();
    document.cookie = cname + "=" + cvalue + "; " + expires;
}
 
 
 
 
 
 
 
/* 6.	Programa con JavaScript que al clicar sobre Recupera Datos se sustituya
 *  el valor de los inputs por el valor almacenado en su correspondiente cookie.
 * 
 */
 
function getCookie(name) {
    var cname = name + "=";
    var dc = document.cookie;
    if (dc.length > 0) {
        begin = dc.indexOf(cname);
        if (begin !== -1) {
            begin += cname.length;
            end = dc.indexOf(";", begin);
            if (end === -1)
                end = dc.length;
            return unescape(dc.substring(begin, end));
        }
    }
    return null;
}

Captura

luego en el firebug segun voy escribiendo se van rellenando

Captura1
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar