Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Pessoal,
Criei uma página normal, onde listo todos os css (type="text/css") em um combobox (tag select), para a pessoa escolher o layout.
Até aí tudo bem.
Estou gravando em um cookie a opção da pessoa, para que em visitas futuras, permaneça a escolha sem que precisa novamente escolher. Já sairá com o layout da última vez escolhido, simples.
Ok?
Mas isto não está funcionando corretamente, esta parte do cookie, tanto no FF como no IE.
O código na página está unobtrusive ( não obstrusivo ).
Caso não entendam, faço de um jeito mais simples pra quem não conseguir entender.
Embora eu precise de ajuda pra resolver o problema.
Podem olhar a página acessando url abaixo:
http://www.laroya.com.br/webdeveloper/switcher/
Valeu!
Eu acho que o problema dele não é em mudar o estilo, é em gravar o estilo usando cookie..Eu estou sem tempo agora, não sei se vi certo, mas parece que ele não está recebendo o valor da opção selecionada para gravar o cookie..
' date='Jan 8 2006, 08:55 PM' post='494338']<!-- aki um erro da programação, meu nick ajudou :D -->Mas isto não está funcionando corretamente, esta parte do cookie, tanto no FF como no IE.
Eu acho que o problema dele não é em mudar o estilo, é em gravar o estilo usando cookie..Eu estou sem tempo agora, não sei se vi certo, mas parece que ele não está recebendo o valor da opção selecionada para gravar o cookie..
Exato!Meu problema está no maldito cookie :P E parece estar tudo correto no código, e já debuguei... talvez eu não esteja conseguindo ver o tal erro... se vocês conseguirem :) Vou copiar o código todo da página e colocar aqui.<?xml version="1.0" encoding="iso-8859-1"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "[http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">http-equiv="content-language" content="pt-BR" /> <meta http-equiv="content-style-type" content="text/css" /> <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" /> <link href="css1.css" type="text/css" rel="stylesheet" title="blue" /> <link href="css2.css" type="text/css" rel="alternate stylesheet" title="red" /> <link href="css3.css" type="text/css" rel="alternate stylesheet" title="green" /> <script language="javascript" type="text/javascript"> //<![CDATA[ var w=window, d=document, a, i, n, t; function selectStyle(t) { if (arguments.length==1) t=gE('trocacss').value; for(i=0; i<n; a[i].disabled=a[i].type=='text/css'&&a[i].title!=t, i++); setCookie('folhadeestilo',t,365); } function getCookie(n){//nome do cookie if (d.cookie.length < 0) return null; var begin = d.cookie.indexOf(n +"="), end; if (begin != -1) { begin += n.length+1; end = d.cookie.indexOf(";", begin); if (end == -1) end = d.cookie.length; return unescape(d.cookie.substring(begin, end)); } } function setCookie(n, v, d) {//Nome do cookie, Valor, expire Days var ExpireDate = new Date(); ExpireDate.setTime(ExpireDate.getTime() + (d * 24 * 3600 * 1000)); d.cookie = n + '=' + escape(v) + ((d == null) ? '' : '; expires=' + ExpireDate.toGMTString()); } //var w=window, d=document; function gE(tI) { return (d.getElementById) ? d.getElementById(tI) : (d.all) ? d.all[tI] : false; } //function actNo(e) { w.event? event.returnValue=false : e.preventDefault(); return false; } //function getSrc(e) { var el; return ( ( el=e.target || (w.event && event.srcElement) ) && (el.parentNode==3 && el.parentNode || el) ) || false; } function getKeyCode(e) { return e.keyCode? e.keyCode : e.charCode? e.charCode : e.which? e.which : void 0; } function addEvent(elm, evType, fn) { if (elm.addEventListener) { elm.addEventListener(evType, fn, true); return true; } if (elm.attachEvent) return elm.attachEvent("on"+evType, fn); alert("Handler could not be added"); return false; } function menulayout() { if (!a) return false; var menu=('<select name="trocacss" id="trocacss">');/*atenção!*/ menu+=('<option value="">Escolha um layout:</option>'); for(i=0; i<n; i++) { if(a[i].type=="text/css") { menu+=('<option value="'+a[i].title+'"'); if(t==a[i].title) menu+=('selected="selected"'); menu+=('>'+a[i].title+'</option>'); } } menu+=('</select>'); gE('menulayout').innerHTML=menu; } function init() { n=(a=d.getElementsByTagName("link")).length, t=getCookie("folhadeestilo"); menulayout(); var el=gE('trocacss'); if (el) addEvent(el,"change",selectStyle) if (t!=null) selectStyle(t,1); } addEvent(w,"load",init) //]]> </script></head><body><div id="geral"> <div id="cabecalho"> <form id="menulayout"></form> </div> <ul id="top-list-menu"> <li><a href="#">link</a></li> <li><a href="#">link</a></li> <li><a href="#">link</a></li> </ul> <p>meu paragrafo</p></div></body></html>O problema está na variavel d da função setCookie()..
Lá em cima, você declarou a variavel d com o valor de document, certo? Ela vai funcionar até você chamar a função setCookie.. Pq nessa função você já muda o valor da vairavel d pela data (365) . .
Olhe a linha que grava o cookie
d.cookie = n + '=' + escape(v) + ((d == null) ? '' : '; expires=' + ExpireDate.toGMTString());
Ele teria que funcionar só no if() e não no d.cookie.. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif entendeu?
Acho que é isso.. tente mudar para ver..
Aeee LEX!
Isso mesmo brother, valeu aí.
Que desatenção a minha :P
Dentro da função setCookie, eu mudei o nome do argumento d para ed ;)
Assim:
function setCookie(n, v, ed) {//Nome do cookie, Valor, expire Days var ExpireDate = new Date(); ExpireDate.setTime(ExpireDate.getTime() + (ed * 24 * 3600 * 1000)); d.cookie = n + '=' + escape(v) + ((ed == null) ? '' : '; expires=' + ExpireDate.toGMTString()); }Agora tá beleza no FF.No IE tem um problema, depois q selecionei minha opção, beleza, troca o layout direitinho.
Aí fecho a janela.
Quando abro dinovo essa página, era pro cookie carregar minha opção e o layout ficar beleza.
Aki em casa carrega no select, mas na página fica sem estilo nenhum.
No FF fica tudo certo.
Sabe o q pode ser?
Opa!!E ai guto beleza ? Brother, está alterando normalmente seu estilo no I.E/ Firefox. Só não está realizando o posicionamento perfeito.Grande Abraço!