代码之家  ›  专栏  ›  技术社区  ›  Ali Imran

两个同名函数,我想调用哪个DIV处于活动状态的函数

  •  0
  • Ali Imran  · 技术社区  · 8 年前

    我有两个div,但有相同的脚本方法。我想调用一个方法,Div有 display:block . 但在这种情况下,调用脚本方法,DIV display:none .

    function Callme() {
      sameName();
    }
    <div class="1" style="display:block">
      div 1
      <script>
        function sameName() {
          alert("1")
          //some code
        }
      </script>
    </div>
    <div class="2" style="display:none">
      div 2
      <script>
        function sameName() {
          //some code
          alert(2)
        }
      </script>
    </div>
    <input type="button" value="clickMe" onclick="Callme()">
    3 回复  |  直到 8 年前
        1
  •  1
  •   Ankit Agarwal    8 年前

    它提醒你 2 因为当函数或变量具有相同的名称时,javascript运行时将覆盖以前的声明,并考虑该函数或变量的最后一个声明。在你的情况下,最后的声明是

    function sameName(){
     //some code
     alert(2)
    }
    

    所以,这个函数 sameName() 被认为具有 alert(2) . 要使代码正常工作,您需要检查DIV display:block 或者不在函数内部,并相应地设置条件,如:

    function Callme(){
      sameName();
    }
    function sameName(){
      let display1 = document.getElementsByClassName('1')[0].style.display;
      if(display1 === 'block' ){
        alert(1);
      }
      let display2 = document.getElementsByClassName('2')[0].style.display;
      if(display2 === 'block' ){
        alert(2);
      }
    }
    <div class="1" style="display:block">
    div 1
    </div>
    
    <div class="2" style="display:none">
    div 2
    </div>
    <input type="button" value="clickMe" onclick="Callme()">
        2
  •  0
  •   Joachim Cardoen    8 年前

    重命名函数,因为您将重写它(在第二个脚本标记之间重写第一个声明的执行上下文)

        3
  •  0
  •   Ali Imran    8 年前

    我可以通过删除最新的函数方法来解决这个问题,该方法隐藏并重新加载活动的HTML DIV。实际上,编译器得到的javascript方法是DOM上最新的同名方法。所以我删除了最新的和显示的DIV,我呈现了具有javascript功能的HTML。

    function Callme() {
     $(".2").html("")
    
    var html1= $(".1").html();
    $(".1").html(html1);
    sameName();
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <div class="1" style="display:block">
      div 1
      <script>
        function sameName() {
          alert("1")
          //some code
        }
      </script>
    </div>
    <div class="2" style="display:none">
      div 2
      <script>
        function sameName() {
          //some code
          alert(2)
        }
      </script>
    </div>
    <input type="button" value="clickMe" onclick="Callme()">