Foros del Web » Programando para Internet » Jquery »

Cambiar CSS de forma permanente (JQuery)

Estas en el tema de Cambiar CSS de forma permanente (JQuery) en el foro de Jquery en Foros del Web. hola gente que tal, tengo un problema con la siguiente funcion: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código Javascript : Ver original function CambiarTheme ( ID ) {   ...
  #1 (permalink)  
Antiguo 17/09/2012, 11:18
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años
Puntos: 320
Pregunta Cambiar CSS de forma permanente (JQuery)

hola gente que tal, tengo un problema con la siguiente funcion:

Código Javascript:
Ver original
  1. function CambiarTheme(ID){
  2.                 THM = new Array();
  3.                 THM[0] = new Array();
  4.                 THM[0][1] = "800000";  
  5.                 THM[0][2] = "AA0000";
  6.                 THM[1] = new Array();
  7.                 THM[1][1] = "008000";
  8.                 THM[1][2] = "00AA00";
  9.                 THM[2] = new Array();
  10.                 THM[2][1] = "000080";
  11.                 THM[2][2] = "0000AA";
  12.                 STL = '-webkit-gradient(linear, 0% 0%, 0% 100%, from(#'+THM[ID][1]+'), to(#'+THM[ID][1]+'), Color-stop(.5,#'+THM[ID][2]+'),Color-stop(.9,#'+THM[ID][2]+'))';
  13.                 $('Body > Header').css('background-image', STL);
  14.                 $('Input[Type=\'Submit\']').css('background-image', STL);
  15.             }

obviamente utilizo jquery (lo notaran por la sintaxis).

bien el tema es el siguiente, la funcion anda perfectamente el tema es que una parte de mi web se carga de forma asincronica y si ejecuto la funcion cambian los colores pero al cargarse un nuevo "submit" lo hace con el estilo por defecto y no con el especificado y debo ejecutar nuevamente la funcion.

la pregunta, hay alguna forma de aplicar ese estilo para todos los elementos que se creen dinamicamente luego?
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #2 (permalink)  
Antiguo 17/09/2012, 15:50
Avatar de Naahuel  
Fecha de Ingreso: marzo-2011
Ubicación: localhost
Mensajes: 796
Antigüedad: 13 años, 1 mes
Puntos: 192
Respuesta: Cambiar CSS de forma permanente (JQuery)

Lo mejor sería usar una cookie. Cuando hagas el traspaso del tema, con AJAX podés enviar al servidor el cambio de theme y este almacenaría una cookie en el cliente. Luego, usarías esa cookie para cargar el theme.

También podés usar cookies directamente con jQuery. Ahí podés almacenar la preferencia del usuario. http://www.electrictoolbox.com/jquery-cookies/
__________________
nahueljose.com.ar
  #3 (permalink)  
Antiguo 17/09/2012, 15:51
Avatar de Naahuel  
Fecha de Ingreso: marzo-2011
Ubicación: localhost
Mensajes: 796
Antigüedad: 13 años, 1 mes
Puntos: 192
Respuesta: Cambiar CSS de forma permanente (JQuery)

Acá podés ver un ejemplo http://lineadecodigo.com/jquery/usan...es-con-jquery/
__________________
nahueljose.com.ar
  #4 (permalink)  
Antiguo 18/09/2012, 18:00
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años
Puntos: 320
Respuesta: Cambiar CSS de forma permanente (JQuery)

hola naahuel gracias por responder, creo que me he expresado mal porque usar cookies para lo que quiero hacer me parece innesesario.

mi problema es el siguiente (intento reformular) tengo en css:

Código CSS:
Ver original
  1. Body > Header , Input[Type='Submit'] {background-image:-webkit-gradient(linear, 0% 0%, 0% 100%, from(#000), to(#000), Color-stop(.5,#222),Color-stop(.9,#222))}

ese esta en la hoja de estilos y anda bien, por otro lado tengo la funcion que mostre antes.
cuando corro la funcion todos los elementos que veo en pantalla cambian su css pero los que se crean nuevamente no.

yo creo nuevos input (como son input podria ser tambien con una clase css) y esta toma la que esta en la hoja css no la que cambie, mi pregunta mas directa es como cambiar un atributo de la hoja de estilos css principal con jquery, puesto que si lo hago como hasta ahora cambio el de los elementos actuales pero no de la hoja principal.

espero haberme explicado bien saludos.
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #5 (permalink)  
Antiguo 18/09/2012, 18:39
Avatar de Naahuel  
Fecha de Ingreso: marzo-2011
Ubicación: localhost
Mensajes: 796
Antigüedad: 13 años, 1 mes
Puntos: 192
Respuesta: Cambiar CSS de forma permanente (JQuery)

Creo haber entendido. Aplicás estilos CSS a unos inputs, unos por uno. Y querés que los nuevos hereden ese estilo.

¿Por qué no usas clases? Añadí clases al <body>. Y en tu hoja de estilos pondrías algo así:

Código CSS:
Ver original
  1. .dark input{
  2. background: black; color: white;
  3. }
  4.  
  5. .light input{
  6. background: white; color: black;
  7. }

De esta manera los inputs nuevos simplemente heredarán los estilos de acuerdo a la clase que tenga el body.

Creo que un ejemplo explicará mejor: http://jsbin.com/akipup/1

Como verás ahí, si cambias el tema, los inputs (nuevos y viejos) siempre cambian.

-edit-
En el ejemplo, los inputs se agregan en cualquier lado :P No tengo ganas de corregirlo, igual funciona.
__________________
nahueljose.com.ar

Última edición por Naahuel; 18/09/2012 a las 18:45
  #6 (permalink)  
Antiguo 18/09/2012, 18:54
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años
Puntos: 320
Respuesta: Cambiar CSS de forma permanente (JQuery)

hola de nuevo, ahi te estas acercando a lo que quiero hacer jaja
Cita:
En el ejemplo, los inputs se agregan en cualquier lado :P No tengo ganas de corregirlo, igual funciona.
no problem, para dar la idea alcanza y sobra.

estube viendo el codigo pero hay un detalle, no usaria clases :S
el valor de los atributos no siempre son predefinidos.


por la web encontre esto:

Código Javascript:
Ver original
  1. function cambiarPropiedad(regla,propi,valor) {
  2.   if (document.all)
  3.     miRegla = document.styleSheets[0].rules;
  4.   else
  5.     miRegla = document.styleSheets[0].cssRules;
  6.   for (i=0; reg=miRegla[i]; i++)
  7.     if (reg.selectorText.toLowerCase() == regla.toLowerCase() )
  8.       reg.style[propi]=valor;
  9. }

y funciona como quiero (masomenos) esa funcion cambia el valor en el css de forma directa el tema es que no me convence mucho eso de hacer un for recorriendo todos los estilos hasta dar con el indicado, no habra algo asi en jquery?
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #7 (permalink)  
Antiguo 18/09/2012, 18:58
Avatar de Naahuel  
Fecha de Ingreso: marzo-2011
Ubicación: localhost
Mensajes: 796
Antigüedad: 13 años, 1 mes
Puntos: 192
Respuesta: Cambiar CSS de forma permanente (JQuery)

Mmm. No sé. Me parece ineficiente. Yo usaría las clases, es todo lo que se me ocurre. No veo por qué la limitación...
__________________
nahueljose.com.ar
  #8 (permalink)  
Antiguo 18/09/2012, 19:05
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años
Puntos: 320
Respuesta: Cambiar CSS de forma permanente (JQuery)

Cita:
Me parece ineficiente.
a mi tambien, es lo que no me cierra.
el tema es que tendria un boton de una clase y cada vez que lo creo tendia que estar "pendiente" a variale la clase segun corresponda, en cambio si una sola vez cambio el atributo de una clase unica me olvido del tema y funcionaria ciempre de forma eficiente.

vere si puedo adaptarlo a algo un poco "mas lindo" y lo publico, muchas gracias por tu ayuda
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #9 (permalink)  
Antiguo 18/09/2012, 19:57
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años
Puntos: 320
Respuesta: Cambiar CSS de forma permanente (JQuery)

bueno como lo prometido es deuda aqui publico la solucion que utilizare por si a alguien mas le sirve:

utilice el plugin de jquery: http://flesler.blogspot.com.ar/2007/11/jqueryrule.html

y con eso lo arregle XD

la funcion quedo asi:
Código Javascript:
Ver original
  1. function CambiarTheme(ID){
  2.     var EST = xajax.call('EVCCT', {mode:'synchronous', parameters:[ID]});
  3.     if (EST){
  4.         THM = new Array();
  5.         THM[0] = new Array();
  6.         THM[0][1] = "800000";  
  7.         THM[0][2] = "AA0000";
  8.         THM[1] = new Array();
  9.         THM[1][1] = "008000";
  10.         THM[1][2] = "00AA00";
  11.         THM[2] = new Array();
  12.         THM[2][1] = "000080";
  13.         THM[2][2] = "0000AA";
  14.         STL = '-webkit-gradient(linear, 0% 0%, 0% 100%, from(#'+THM[ID][1]+'), to(#'+THM[ID][1]+'), Color-stop(.5,#'+THM[ID][2]+'),Color-stop(.9,#'+THM[ID][2]+'))';
  15.         $.rule('Body > Header { Background-Image : '+STL+'; }').appendTo('link');
  16.         $.rule('Input[Type=\'Submit\'] { Background-Image : '+STL+'; }').appendTo('link');
  17.         CargarContenido('ESV','Cambiado',1);
  18.     } else {       
  19.         CargarContenido('ESV','Error',1);
  20.     }
  21.     return false;  
  22. }
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios

Etiquetas: css, funcion, input, permanente, formulario
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:16.