2017-01-25 32 views
0

我正在处理一段代码,但遇到了一些小问题。我得到的是一个与错误代码结合的错误消息。Javascript else语句复制状态元素而不是替换

消息可以由后端用户更改。该代码由Google生成。

错误消息:

作为上述错误信息,所述可以通过在Joomla CMS的系统的后端的用户而改变。然后将其保存并作为PHP变量进行检索。然后将此变量输入到ID为“gmd-alert”的div中。

我使用innerHTML来检索该文本。因为我不能将php变量用于js。

错误代码:

是由谷歌生成此代码,通常给像NOT_FOUND

为什么合并?

  1. 最终产品在不同的语言中应该是可用的,因此用户应该能够修改错误消息。
  2. 当只依赖错误代码(status)时,网站访问者现在不知道错误是什么。

部分代码

有问题的代码如下:

if (status === 'OK') { 
    var d = document.getElementById("gmd-alert"); 
    directionsDisplay.setDirections(response); 
} else { 
    //window.alert('Directions request failed due to ' + status); 
    var d = document.getElementById("gmd-alert"); 
    d.className -= " gmd-hidden"; 
    d.className += " gmd-visible"; 
    d.innerHTML = d.innerHTML + status; 
    setTimeout(function(){ 
    d.className -= " gmd-visible"; 
    d.className += " gmd-hidden"; 
    }, 2000); 
} 

的问题是,当else语句多次运行它,然后显示是这样的:errormessage errorcode errorcode errorcode

如何我可以让它像这样运行:即使它被发射了20倍,也可以使用errormessage errorcode


换句话说发射的其他功能的3倍它给时: innerHTML status status status但我想innerHTML status


的innerHTML是通过PHP插入一个用户自定义文本。

在此先感谢您的帮助!

+0

这里是你的问题:d.innerHTML = d.innerHTML +状态;应该是d.innerHTML =状态 – Eric

+0

你认为'd.innerHTML = d.innerHTML +状态是什么意思? –

+0

@Eric我明白你来自哪里,但innerHTML部分包含一段由PHP插入的文本。如果我按照你的建议去做,我会失去那段文字。 – purple11111

回答

1

而所有其他的答案和评论此页面上是正确的我在这种情况下需要另一种解决方案。幸运的是,其中一条评论给我带来了下一个想法。基本上我得到了PHP变量并将其插入到innerHTML中。现在它做我想要的。

 if (status === 'OK') { 
      var d = document.getElementById("gmd-alert"); 
      directionsDisplay.setDirections(response); 
     } else { 
      //window.alert('Directions request failed due to ' + status); 
      var alerttext_var = "<?php echo $alerttext; ?>"; 
      var d = document.getElementById("gmd-alert"); 
      d.className = "gmd-visible"; 
      d.innerHTML = alerttext_var + status; 
      setTimeout(function(){ 
      d.className = "gmd-hidden"; 
      d.innerHTML = alerttext_var; 
      }, 2000); 
     } 

感谢大家的帮助。即使我没有使用你的解决方案,我真的很感激你的意见!

+0

#显着这个问题的确切解决方案是downvoted ??? – purple11111

+0

那么代码中存在一个错误。修复bug,downvote将被删除。 – epascarello

+0

@epascarello错误已修复,但不符合您的建议。或者你确实这样建议,我只是没有这样理解。无论如何,它现在是固定的。感谢您指出! – purple11111

-1

添加最初设置为false的标志,以跟踪您是否更新了状态。在下面的例子中,我们使用了一个名为statusUpdated的变量。

var statusUpdated = false; 
if (status === 'OK') { 
    var d = document.getElementById("gmd-alert"); 
    directionsDisplay.setDirections(response); 
} else if(statusUpdated === false) { 
    statusUpdated = true; 
    //window.alert('Directions request failed due to ' + status); 
    var d = document.getElementById("gmd-alert"); 
    d.className -= " gmd-hidden"; 
    d.className += " gmd-visible"; 
    d.innerHTML += status; 
    setTimeout(function(){ 
    d.className -= " gmd-visible"; 
    d.className += " gmd-hidden"; 
    }, 2000); 
} 
+0

我刚刚尝试了您的代码,并且很遗憾它具有相同的行为。 PS:我没有做downvote。感谢您的帮助! – purple11111

+0

我很困惑。我的解决方案绝对有效。所以我们错过了一条重要的信息。 (我认为: - /) –

+0

让我试着修改这个问题,以便更清楚。写一个明确的问题有时是相当困难的:-) – purple11111

-1

只需保存d.innerHTML 的内容之前加入味精它(在页面加载,因为文本将通过PHP从我的理解添加)。

var text = '<?php echo $your_text; ?>'; 

那么你可以做

d.innerHTML = text + status; 
+0

这是两行,他已经在做一个。另外,innerHTML不是一个函数。 –

+0

号再次阅读。 OP说他希望保留一些由PHP添加的文本然后做它的其他情况 – Eric

+0

这是什么:'d.innerHTML = d.innerHTML + status;',与你在这个答案中做的不同。 –