Javascript setAttribute、onclick、eventListener赢得';行不通

Javascript setAttribute、onclick、eventListener赢得';行不通,javascript,onclick,addeventlistener,setattribute,Javascript,Onclick,Addeventlistener,Setattribute,因此,我用javascript编写了这段代码,它将替换html中的文本,具体取决于您单击的语言(罗马尼亚语或英语,默认为罗马尼亚语)。我尝试了我所知道的3种点击方式,但都不起作用。你能帮帮我吗? 编辑: 前两条指令根本不起作用(什么都没有发生,即使单击它们也不会发生)。然后,最后一对bouth夫妇在onload上执行(但单击他们之后不工作)。我发现将addEventListener与listener函数一起使用除了事件本身以外的其他参数不起作用,但我仍然对其他方法感到困惑 网站 英语 罗马尼

因此,我用javascript编写了这段代码,它将替换html中的文本,具体取决于您单击的语言(罗马尼亚语或英语,默认为罗马尼亚语)。我尝试了我所知道的3种点击方式,但都不起作用。你能帮帮我吗?

编辑:

前两条指令根本不起作用(什么都没有发生,即使单击它们也不会发生)。然后,最后一对bouth夫妇在onload上执行(但单击他们之后不工作)。我发现将addEventListener与listener函数一起使用除了事件本身以外的其他参数不起作用,但我仍然对其他方法感到困惑


网站
英语
罗马尼亚语

比娜·艾维尼特·佩斯·乌尔·缪!

setItem(“languageStored”、“romanian”); 变量语言={ 英语:{ 欢迎:“欢迎光临我的网站!” }, ro:{ 欢迎光临:“比纳艾维尼体育网站ul meu!” } }; window.onload=函数() { 让optEngl=document.getElementById('english'); 让optRo=document.getElementById('romanian'); //setAttribute('click','languageChange(this,optRo'); //setAttribute('click','languageChange(this,optEngl'); //optEngl.onclick=语言变化(this,optEngl); //optRo.onclick=语言变化(this,optRo); //addEventListener(“单击”,语言更改(this,optEngl)); //addEventListener(“单击”,语言更改(this,optRo)); } 函数语言更改(e,obj) { 让languageStored=localStorage.getItem(“languageStored”); if(languageStored!=对象id) { 控制台日志(对象id); languageStored=obj.id; setItem(“languageStored”,languageStored); 如果(语言存储==“英语”) document.getElementById(“段落”).textContent=language.eng.welcome; 其他的 document.getElementById(“段落”).textContent=language.ro.welcome; } } ```
将回调作为第二个参数,因此在添加函数时不需要
()

此外,您可以在回调函数中使用
this
来引用事件触发的元素-这只是稍微清理了函数代码-您不需要在
languageChange
函数中包含任何参数

LocalStorage无法处理此站点上的代码段,因此我编写了一个快速的

localStorage.setItem(“languageStored”、“romanian”);
变量语言={
英格:{欢迎光临我的网站!},
ro:{欢迎光临:“我的威尼斯之家!”
};
window.onload=函数(){
让optEngl=document.getElementById('english');
让optRo=document.getElementById('romanian');
optEngl.addEventListener('click',languageChange);
optRo.addEventListener('click',languageChange);
}
函数语言更改(){
//获取存储的语言
让languageStored=localStorage.getItem(“languageStored”);
//您可以使用'this'而不是'obj'来引用单击的元素
if(languageStored!=此.id){
languageStored=this.id;
setItem(“languageStored”,languageStored);
如果(语言存储==“英语”)
document.getElementById(“段落”).textContent=language.eng.welcome;
其他的
document.getElementById(“段落”).textContent=language.ro.welcome;
}
}
}

我对您的代码做了几处更改。首先,我认为您可以直接从
标记调用函数,而不需要
窗口。onload
。我在代码中发现的一个问题是,当您发送
optEngl
时,您只是作为
optEngl
发送,没有任何引号,这让js认为它不是字符串。然后,我使用
localeCompare
而不是
=
修改了
languageChange
函数中的字符串比较。然后,它工作得很好。我希望这有帮助

<html lang="en">
  <head>
    <title>
      Website
    </title>
    <meta charset="UTF-8">
  </head>

  <body>

    <a id='english' onClick="languageChange(this , 'optEngl');">English</a>
    <a id='romanian' onClick="languageChange(this , 'optRo');">Romanian</a>

    <p id="paragraph">
      Bine ai venit pe site-ul meu!
    </p>

    <script type="text/javascript">
      localStorage.setItem("languageStored", "romanian");

      var language = {
        eng: {
          welcome: "Welcome to my website!"
        },
        ro: {
          welcome: "Bine ai venit pe site-ul meu!"
        }
      };

      function languageChange(e, obj) {
        let languageStored = localStorage.getItem("languageStored");
        if (languageStored != obj) {
          localStorage.setItem("languageStored", obj);
          if (languageStored.localeCompare("optEngl")) {
            document.getElementById('paragraph').textContent = language.eng.welcome;
          } else {
            document.getElementById('paragraph').textContent = language.ro.welcome;
          }
        }
      }

    </script>

  </body>

</html>

网站
片段

通过使用javascript:

<html lang="en">

  <head>
    <title>
      Website
    </title>
    <meta charset="UTF-8">
  </head>

  <body>

    <a id='english'>English</a>
    <a id='romanian'>Romanian</a>

    <p id="paragraph">
      Bine ai venit pe site-ul meu!
    </p>

    <script type="text/javascript">
      localStorage.setItem("languageStored", "romanian");

      var language = {
        eng: {
          welcome: "Welcome to my website!"
        },
        ro: {
          welcome: "Bine ai venit pe site-ul meu!"
        }
      };

      window.onload = function() {
        let optEngl = document.getElementById('english');
        let optRo = document.getElementById('romanian');

        optEngl.onclick = function() {
          languageChange(this, "optEngl");
        }
        optRo.onclick = function() {
          languageChange(this, "optRo");
        }
      }

      function languageChange(e, obj) {
        let languageStored = localStorage.getItem("languageStored");
        if (languageStored != obj) {
          localStorage.setItem("languageStored", obj);
          if (languageStored.localeCompare("optEngl")) {
            document.getElementById('paragraph').textContent = language.eng.welcome;
          } else {
            document.getElementById('paragraph').textContent = language.ro.welcome;
          }
        }
      }

    </script>

  </body>

</html>

网站
英语
罗马尼亚语

比娜·艾维尼特·佩斯·乌尔·缪!

setItem(“languageStored”、“romanian”); 变量语言={ 英语:{ 欢迎:“欢迎光临我的网站!” }, ro:{ 欢迎光临:“比纳艾维尼体育网站ul meu!” } }; window.onload=函数(){ 让optEngl=document.getElementById('english'); 让optRo=document.getElementById('romanian'); optEngl.onclick=函数(){ 语言变化(本“optEngl”); } optRo.onclick=函数(){ 语言变化(本“optRo”); } } 函数语言更改(e,obj){ 让languageStored=localStorage.getItem(“languageStored”); if(语言存储!=obj){ setItem(“languageStored”,obj); if(languageStored.localeCompare(“optEngl”)){ document.getElementById(“段落”).textContent=language.eng.welcome; }否则{ document.getElementById(“段落”).textContent=language.ro.welcome; } } }
“…但它们都不起作用”-“错误描述”毫无意义。会发生什么?应该怎么办?控制台中有错误吗?如果是,请发布准确的错误消息。您已经尝试过解决或调试这个问题了吗?您是否检查过有关这些方法的文档?喜欢
<html lang="en">

  <head>
    <title>
      Website
    </title>
    <meta charset="UTF-8">
  </head>

  <body>

    <a id='english'>English</a>
    <a id='romanian'>Romanian</a>

    <p id="paragraph">
      Bine ai venit pe site-ul meu!
    </p>

    <script type="text/javascript">
      localStorage.setItem("languageStored", "romanian");

      var language = {
        eng: {
          welcome: "Welcome to my website!"
        },
        ro: {
          welcome: "Bine ai venit pe site-ul meu!"
        }
      };

      window.onload = function() {
        let optEngl = document.getElementById('english');
        let optRo = document.getElementById('romanian');

        optEngl.onclick = function() {
          languageChange(this, "optEngl");
        }
        optRo.onclick = function() {
          languageChange(this, "optRo");
        }
      }

      function languageChange(e, obj) {
        let languageStored = localStorage.getItem("languageStored");
        if (languageStored != obj) {
          localStorage.setItem("languageStored", obj);
          if (languageStored.localeCompare("optEngl")) {
            document.getElementById('paragraph').textContent = language.eng.welcome;
          } else {
            document.getElementById('paragraph').textContent = language.ro.welcome;
          }
        }
      }

    </script>

  </body>

</html>