Autor Zpráva
Fuk
Profil *
Dobrý den, mám script na show/hide s tím že se to ješte ukládá do cookie. Potřeboval bych poradit jak udělat změnu obrázku po kliknutí. Kdybych na to kliknul tak se změní obrázek z collapse.gif na expand.gif. Kdyby byl "span - display:none" tak se zobrazí expand.gif a naopak.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<title>Show Hide</title>

<script type='text/javascript'>

function hideSpan( spanId ) 
{
 var spans = document.getElementsByTagName('span'), cv = readCookie('spanStates'), found, store, vis;
  
 for(var i=0;i<spans.length;i++)
 {
  if( spans[i].id.match( spanId ) && spans[i].style.visibility )
  {
   vis = spans[i].style.visibility == "visible"
  
   store = spanId + ':' + (vis ? '0' : '1') + ',';
   
   spans[i].style.visibility = vis ? "hidden" : "visible";
   
   cv = (found = cv.match( new RegExp( spanId + "\:[10]\\," )))  ? cv.replace( found, store ) : cv + store ;
   
   setCookie('spanStates', cv, 30);    
  }
 }

 return false;
}

function initSpans()
{
 var args = arguments, len = args.length, cv = readCookie('spanStates'), found;
 
 if( cv != "" )
  for( var i = 0; i < len; i++ )
   if( ( found = cv.match( new RegExp( args[i] +":([10])\\,") ) ) )
    document.getElementById( args[i] ).style.visibility = ( found[1] == '1' ? 'visible' : 'hidden' );
}

function readCookie( cookieName )
{
 var cValue = ""; /* Reduced from xcookie.js */

 if( typeof document.cookie != 'undefined' )
  cValue = ( cValue = document.cookie.match( new RegExp( "(^|;)\\s*"+this.encodeURIComponent(cookieName)+'=([^;]+);?') ) ) ? cValue[ 2 ] : "" ;

 return decodeURIComponent( cValue );
}

function setCookie( cName, cValue, dayLife, path )
{
 var cs = "", expDate = new Date();
  
 cs = encodeURIComponent( cName ) + "=" + encodeURIComponent( cValue ) + ';' ;

 if( path )
  cs += ';path=' + path;

 if( dayLife )
 {
  expDate.setDate( expDate.getDate() + dayLife );
  cs += ";expires=" + expDate.toGMTString();
 }
  
 document.cookie = cs;

 return readCookie( cName );
}

</script>

</head>
<body>

<span id="a256" style="visibility:hidden;" >
My content<br/>
</span>

<a href="#" onclick="return hideSpan('a256')">show/hide span a256 <img src="http://www.shopdev.co.uk/blog/expand.gif" border="0"></a>

<script type='text/javascript'>

initSpans('a256');

</script>
</body>
</html>
CAShiD
Profil
Co takhle použít jQuery?
Vše je pak mnohem snažší a Ty získáš to co potřebuješ ;-)

Do hlavičky:
<script type="text/javascript" src="http://code.jquery.com/jquery-1.4.4.min.js"></script>

KOD:
<body>
<span id="span1" onClick="$('#span1').hide(); $('#span2').show();">PRVNÍ OBRAZEK</span>
<span id="span2" style="display:none" onClick="$('#span1').show(); $('#span2').hide();">DRUHY OBRAZEK</span>
</body>

Dle potřeby si zaměň texty za obrázky. Je to odzkoušeno - takže funkční ;-)
Doufám že Ti to pomůže ;-)
Chamurappi
Profil
Reaguji na CAShiDa:
Jak už je u jQuery-spamů tradicí, neřešíš vůbec zadání. Tvůj kód neřeší ukládání do cookies, je frameworkovou verzí obyčejného skrývání/odkrývání, které je bez frameworku také na jeden řádek.


Reaguji na Fuka:
Ten skript je napsaný zvláštně, zjevně se při přepínání snaží působit na všechny elementy s daným id, ovšem při inicializaci dohledává jen jeden.
Obrázku dej id="a256-toggle", za čtyřicátý řádek přidej:
document.getElementById( args[i] + "-toggle" ).src = ( found[1] == '1' ? 'collapse.gif' : 'expand.gif' );
… a za dvacátý druhý:
document.getElementById( spans[i].id + "-toggle" ).src = vis ? "expand.gif" : "collapse.gif";
Cesty k obrázkům si případně uprav, měl by sis je nahrát na svůj web (předpokládám, že ti nepatří shopdev.co.uk).
Budeš-li mít potíže s funkčností po provedení úprav, dodej rovnou odkaz na živou ukázku.

Kdyby byl "span - display:none" tak…
… tak bude navěky neviditelný, protože uvedený skript pracuje s visibility a ne s displayem.
Fuk
Profil *
Chamurappi:
Díky moc všechno funguje jak má, ale přesto bych měl ješte jeden dotaz na zobrazení obrázku. Když si to uživatel schová a potom načte tu stránku tak se mu zobrazí obrázek, kterej mám v img napsanej a já se chci zeptat jak by to šlo ješte doopravit, aby se zobrazoval správný obrázek? Když to bude mít schováný tak se načte expand.gif a naopak.

(předpokládám, že ti nepatří shopdev.co.uk)
Předpokládáš správně, ten obrázek byl vyhledán přes google a jen použit na zkoušku.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0