Hi,
im using an accordion script but it doesnt work if i use it with ajax.
example:
works ok, but if i do:
it works only for the first page, but when i use the ajax to reload the foreach statement, when i click the script it does nothing, not even an error and the panes are all collapsed.
it seems that the script lack of an onclick function in the <dt> pane, instead the onclick function that's triggered from within the script.
accordion.js
HTML
style.css
So my question is:
would it be possible to create an onClick function, like "onClick=open_p ane($pane_id)", instead of how is doing now?
Thanks.
im using an accordion script but it doesnt work if i use it with ajax.
example:
Code:
<div id="accordion">
<dl class="accordion" id="slider">
<dt>click here for the 1st pane</dt>
<dd>content of the 1st pane</dd>
<dt>click here for the 1st pane</dt>
<dd>content of the 1st pane</dd>
<dt>click here for the 1st pane</dt>
<dd>content of the 1st pane</dd>
</dl>
</div>
Code:
<div id="accordion">
<dl class="accordion" id="slider">
<?
foreach ($array as $n)
{
<dt>click here for the $n pane</dt>
<dd>content of $n </dd>
}
?>
</dl>
</div>
it seems that the script lack of an onclick function in the <dt> pane, instead the onclick function that's triggered from within the script.
accordion.js
Code:
var accordion=function(){
var tm=sp=10;
function slider(n){this.nm=n; this.arr=[]}
slider.prototype.init=function(t,c,k){
var a,h,s,l,i; a=document.getElementById(t); this.sl=k?k:'';
h=a.getElementsByTagName('dt'); s=a.getElementsByTagName('dd'); this.l=h.length;
for(i=0;i<this.l;i++){var d=h[i]; this.arr[i]=d; d.onclick=new Function(this.nm+'.pro(this)'); if(c==i){d.className=this.sl}}
l=s.length;
for(i=0;i<l;i++){var d=s[i]; d.mh=d.offsetHeight; if(c!=i){d.style.height=0; d.style.display='none'}}
}
slider.prototype.pro=function(d){
for(var i=0;i<this.l;i++){
var h=this.arr[i], s=h.nextSibling; s=s.nodeType!=1?s.nextSibling:s; clearInterval(s.tm);
if(h==d&&s.style.display=='none'){s.style.display=''; su(s,1); h.className=this.sl}
else if(s.style.display==''){su(s,-1); h.className=''}
}
}
function su(c,f){c.tm=setInterval(function(){sl(c,f)},tm)}
function sl(c,f){
var h=c.offsetHeight, m=c.mh, d=f==1?m-h:h; c.style.height=h+(Math.ceil(d/sp)*f)+'px';
c.style.opacity=h/m; c.style.filter='alpha(opacity='+h*100/m+')';
if(f==1&&h>=m){clearInterval(c.tm)}else if(f!=1&&h==1){c.style.display='none'; clearInterval(c.tm)}
}
return{slider:slider}
}();
Code:
<!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">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>JavaScript Accordion</title>
<link rel="stylesheet" href="style.css" type="text/css" />
<script type="text/javascript" src="accordion.js"></script>
</head>
<body>
<div id="accordion">
<dl class="accordion" id="slider">
<dt>CLICK ME</dt>
<dd>test </dd>
<dt>CLICK ME</dt>
<dd>test 2 </dd>
<dt>CLICK ME</dt>
<dd>Test 3 </dd>
</dl>
</div>
<script type="text/javascript">
var slider1=new accordion.slider("slider1");
slider1.init("slider");
</script>
</body>
</html>
Code:
* {margin:0; padding:0}
#accordion {width:459px; margin:50px auto}
.accordion {width:459px; font:12px Verdana,Arial; color:#033}
.accordion dt {width:439px; border:2px solid #9ac1c9; padding:8px; font-weight:bold; margin-top:5px; cursor:pointer; background:url(images/header.gif)}
.accordion dt:hover {background:url(images/header_over.gif)}
.accordion dd {overflow:hidden; background:#fff}
.accordion span {display:block; width:425px; border:2px solid #9ac1c9; border-top:none; padding:15px}
#accordion2 {width:259px; margin:50px auto; border:1px solid #333; border-top:none}
.accordion2 {width:259px; font:12px Verdana,Arial; color:#333}
.accordion2 dt {width:247px; padding:4px 6px; font-weight:bold; cursor:pointer; background-color:#666; background-image:url(images/arrow_down.gif); background-position:right center; background-repeat:no-repeat; color:#fff; border-top:1px solid #333}
.accordion2 dt:hover {background-color:#555}
.accordion2 .open {background-color:#444; background-image:url(images/arrow_up.gif)}
.accordion2 dd {overflow:hidden; background:#fff}
.accordion2 span {display:block; width:229px; border-top:none; padding:15px}
would it be possible to create an onClick function, like "onClick=open_p ane($pane_id)", instead of how is doing now?
Thanks.
Comment