Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript-在手风琴展开/折叠时设置文本_Javascript_Css_Accordion - Fatal编程技术网

Javascript-在手风琴展开/折叠时设置文本

Javascript-在手风琴展开/折叠时设置文本,javascript,css,accordion,Javascript,Css,Accordion,我有一个JavaScript手风琴式菜单。我想在菜单部分标题前面有一个指示器,当部分折叠时显示(+),当部分展开时显示(-)。根据下面的代码,我已经能够做到这一点,但是指示器仅在单击时更改,而不是根据节是展开还是折叠来设置。我已经看了几个小时了,如果能多看一眼,我会很感激的,因为我可能无法理解其中的逻辑 下面是Javascript: var ContentHeight; var TimeToSlide = 250.0; var opening; var openAccordion = '';

我有一个JavaScript手风琴式菜单。我想在菜单部分标题前面有一个指示器,当部分折叠时显示(+),当部分展开时显示(-)。根据下面的代码,我已经能够做到这一点,但是指示器仅在单击时更改,而不是根据节是展开还是折叠来设置。我已经看了几个小时了,如果能多看一眼,我会很感激的,因为我可能无法理解其中的逻辑


下面是Javascript:

var ContentHeight;
var TimeToSlide = 250.0;
var opening;
var openAccordion = '';

function runAccordion(index, height)
{
  ContentHeight = height;
  var nID = "Accordion" + index + "Content";
  if(openAccordion == nID)
    nID = '';

  setTimeout("animate(" + new Date().getTime() + "," + TimeToSlide + ",'" 
      + openAccordion + "','" + nID + "')", 33);

  openAccordion = nID;
}
function animate(lastTick, timeLeft, closingId, openingId)
{  
  var curTick = new Date().getTime();
  var elapsedTicks = curTick - lastTick;

  opening = (openingId == '') ? null : document.getElementById(openingId);
  var closing = (closingId == '') ? null : document.getElementById(closingId);

  if(timeLeft <= elapsedTicks)
  {
    if(opening != null)
      opening.style.height = ContentHeight + 'px';

    if(closing != null)
    {
      closing.style.display = 'none';
      closing.style.height = '0px';
    }
    return;
  }

  timeLeft -= elapsedTicks;
  var newClosedHeight = Math.round((timeLeft/TimeToSlide) * ContentHeight);

  if(opening != null)
  {
    if(opening.style.display != 'block')
      opening.style.display = 'block';
    opening.style.height = (ContentHeight - newClosedHeight) + 'px';
  }

  if(closing != null)
    closing.style.height = newClosedHeight + 'px';

  setTimeout("animate(" + curTick + "," + timeLeft + ",'" 
      + closingId + "','" + openingId + "')", 33);
}
function changeText(index){

    var accordionID = "Accordion" + index + "Content";
    var indicatorID = document.getElementById("expandIndicator" + index);
    var currentIndicator = indicatorID.innerHTML;
    var openIndicator = "(+)";
    var closedIndicator = "(-)";

    if (currentIndicator == openIndicator) {
        indicatorID.innerHTML = closedIndicator; }
    else {
        indicatorID.innerHTML = openIndicator; }
}
var内容高度;
var-TimeToSlide=250.0;
var开放;
var openAccordion=“”;
功能运行手风琴(索引、高度)
{
ContentHeight=高度;
var nID=“手风琴”+索引+“内容”;
如果(openAccordion==nID)
nID='';
setTimeout(“动画”(“+new Date().getTime()+”,“+TimeToSlide+”,”
+openAccordion+“,”+nID+“)”,33);
openAccordion=nID;
}
函数animate(lastTick、timeLeft、closingId、openingId)
{  
var curTick=new Date().getTime();
var elapsedTicks=curTick-lastTick;
opening=(openingId=“”)?null:document.getElementById(openingId);
var closing=(closingId=“”)?null:document.getElementById(closingId);

if(timeLeft在执行任何其他操作之前,您需要在changeText方法中将所有指示符设置为“+”。在changeText方法的if语句之前添加以下代码

document.getElementById("expandIndicator1").innerHTML = openIndicator;
document.getElementById("expandIndicator2").innerHTML = openIndicator;
document.getElementById("expandIndicator3").innerHTML = openIndicator;
或者,如果内容div太多:

var numberOfContentDivs = 36;
for ( var i = 1; i <= numberOfContentDivs; i++) {
    document.getElementById("expandIndicator" + i).innerHTML = openIndicator;
}
var numberOfContentDivs=36;

对于(var i=1;我知道,您是否试图将其设置为初始页面加载?其他事件是否有时会导致扩展/崩溃?我不确定自己是否理解问题所在。我创建了一个fiddle:,但我没有“获取”您的代码,因此如果您的要求允许,我建议使用jQuery UI。编辑:。编辑:下载和使用最多需要20分钟.JSager-加载页面时,所有步骤都设置为(+)。当您单击步骤1时,它将展开,+,步骤1应改为-。当您单击步骤2时,步骤1将折叠,步骤2将展开。同时,步骤1-应改为步骤1+,步骤2+应改为步骤2-。啊,好的。那么,mindandmedia的想法是正确的。有什么东西阻止您使用jQuery和jQuery UI吗?您会得到b解决业务问题比调试其他人的手动JavaScript小部件更有价值。如果没有,我会尽力提供帮助,但jQ是最好的选择。我从来没有使用过jQuery UI,也不知道重新编写代码需要多长时间。实际菜单中有36个部分。我希望使用什么样的代码才能找到解决方案dy in place.Hrm,由于某些原因,它在单独设置变量值时起作用,但在循环中不起作用。请确保numberOfContentDivs正确。如果不正确,它可能会自动失败。此外,如果我在单击任何其他内容之前单击步骤3,步骤3指示器将变为-如预期的那样;但是,如果您在已单击之后单击步骤3,则在第1步或第2步中,第3步的指示符不会改变。换句话说,只有当您有36个div时,才使用36。否则,请使用正确数量的内容div。啊,好吧……现在是什么导致第3步指示符间歇性改变?
var numberOfContentDivs = 36;
for ( var i = 1; i <= numberOfContentDivs; i++) {
    document.getElementById("expandIndicator" + i).innerHTML = openIndicator;
}