Javascript Else语句复制状态元素而不是替换

Javascript Else语句复制状态元素而不是替换,javascript,Javascript,我正在编写一段代码,但遇到了一个小问题。我得到的是一条与错误代码相结合的错误消息 该消息可由后端用户更改。 代码由谷歌生成 错误消息: 如上所述,用户可以在Joomla CMS系统的后端更改错误消息。然后将其作为PHP变量保存和检索。然后将该变量输入ID为“gmd alert”的div中 我使用innerHTML检索该文本。因为我不能在js中使用php变量 错误代码: 此代码由Google生成,通常会给出类似于NOT\u FOUND 为什么要合并? 最终产品应该可以在不同的语言上使用,因此用户应

我正在编写一段代码,但遇到了一个小问题。我得到的是一条与错误代码相结合的错误消息

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

错误消息: 如上所述,用户可以在Joomla CMS系统的后端更改错误消息。然后将其作为PHP变量保存和检索。然后将该变量输入ID为“gmd alert”的div中

我使用innerHTML检索该文本。因为我不能在js中使用php变量

错误代码: 此代码由Google生成,通常会给出类似于
NOT\u FOUND

为什么要合并?
  • 最终产品应该可以在不同的语言上使用,因此用户应该能够修改错误消息
  • 当仅依赖错误代码(状态)时,网站访问者不清楚现在的错误是什么
  • 部分代码 有关守则如下:

    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

    我如何使它像这样运行:
    errormessage errorcode
    即使它被触发20次


    换句话说,当启动else函数3次时,它给出:
    innerHTML状态
    但我想要
    innerHTML状态


    innerHTML是通过PHP插入的用户定义文本


    提前感谢您的帮助

    添加一个初始设置为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);
    }
    

    在添加msg之前,只需保存d.innerHTML的内容(在页面加载时,因为据我所知,文本将由PHP添加)


    虽然本页上的所有其他答案和评论都是正确的,但在本例中,我需要另一种解决方案。幸运的是,其中一条评论让我想到了下一个想法。基本上,我得到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);
            }
    
    if(状态=='OK'){
    var d=document.getElementById(“gmd警报”);
    方向显示。设置方向(响应);
    }否则{
    //window.alert('由于'+状态,指示请求失败);
    var alerttext_var=“”;
    var d=document.getElementById(“gmd警报”);
    d、 className=“gmd可见”;
    d、 innerHTML=alerttext_var+状态;
    setTimeout(函数(){
    d、 className=“gmd隐藏”;
    d、 innerHTML=alerttext\u var;
    }, 2000);
    }
    


    谢谢大家的帮助。即使我没有使用您的解决方案,我也非常感谢您的投入

    这是您的问题:d.innerHTML=d.innerHTML+状态;应该是d.innerHTML=status你认为怎么样
    d.innerHTML=d.innerHTML+status
    Dos?@Eric我知道您来自哪里,但是innerHTML部分包含一段由PHP插入的文本。如果我按照你的建议做,我将丢失这段文本。@PM77-1添加innerHTML显示以下内容的瞬间:
    方向请求因
    而失败,错误代码显示
    未找到
    可能会检查d.className的值,并且只有在它隐藏了gmd时,才继续执行追加操作,否则,我只是尝试了你的代码,不幸的是,它有同样的行为。附言:我没有投反对票。谢谢你的帮助!我很困惑。我的解决方案应该绝对有效。所以我们遗漏了一条重要的信息。(我想:-/)@purple11111确保我的示例的第一行(var statusUpdated=false)只运行一次。换句话说,将该行移到上述代码所在的块之外。我假设上面的函数在某种回调中。将第一个留置权移到回调之外。我想你只需要接受我的概念,并用它运行。跟踪该状态是否已更新,并且仅在尚未更新时才进行更新。或者,您可以在gmd alert元素中添加一个span元素,并更新其innerHTML。这样你就可以一次又一次地更新它,而不会影响其余的内容。@purple11111这里有一个例子,说明了我所说的替代解决方案的意思:那就是在两行中完成他在一行中已经完成的工作。此外,innerHTML不是一个函数。再读一遍。OP说他希望保留一些由PHP添加的文本,然后这样做,否则情况如何:
    d.innerHTML=d.innerHTML+状态,与此答案中的操作不同。请重新阅读。text是PHP添加的加载文本。文本在加载后不会改变。我在否决之前阅读了你的答案。我坚持认为这是错误的。此外,innerHTML不是一个函数。因此,还有一个明显的语法错误。innerHTML(),应为innerHTML;代码中有一个bug。修正错误,否决票将被删除。@epascarello错误已修正,但不是按照您建议的方式。或者你是这样建议的,而我只是不明白。反正现在已经修好了。谢谢你指出@我仍然不明白的是,为什么我们可以+它,但不-它。这似乎合乎逻辑?有没有可能像我是一个3岁的孩子一样向我解释这一点?PS:谢谢你删除了下一票。因为字符串有连接。字符串没有减法、乘法或除法。当您尝试执行这些操作时,它会尝试将字符串更改为数字并执行该操作。所以基本上它是
    var className=parseFloat(“一个字符串”)-parseFloat(“另一个”)啊,现在我明白了。我在想它会做一种查找和替换的工作。现在我明白你从哪里来了。谢谢你给我解释!
    
    d.innerHTML = text + status;
    
            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);
            }