代码之家  ›  专栏  ›  技术社区  ›  HiDayurie Dave

jQuery/Javascript从返回函数打印值

  •  1
  • HiDayurie Dave  · 技术社区  · 2 年前

    如何将值从函数返回到html元素。

    $.fn.countdown = function(toTime){
      var x = setInterval(function(){
        var now = new Date().getTime();
        var distance = toTime - now;
    
        var days = Math.floor(distance / (1000 * 60 * 60 * 24));
        var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
        var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
        var seconds = Math.floor((distance % (1000 * 60)) / 1000);
    
        var value = days + "d " + hours + "h " + minutes + "m " + seconds + "s ";
        console.log(value);
        return value;
      }, 1000);
    };
    
    $('#my_div').countdown(new Date("Jan 5, 2024 15:37:25").getTime());
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

    我需要该函数的结果值打印到 #my_div .

    1 回复  |  直到 2 年前
        1
  •  2
  •   Rory McCrossan    2 年前

    问题是因为 return 语句位于 setInterval() 因此不会从 $.fn.countdown 调用。

    相反,您需要使用 this 关键字,然后更新该元素。在下面的示例中,我使用 text() 方法

    $.fn.countdown = function(toTime) {
      let $el = $(this);
      
      let timeUpdate = () => {
        var now = new Date().getTime();
        var distance = toTime - now;
    
        var days = Math.floor(distance / (1000 * 60 * 60 * 24));
        var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
        var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
        var seconds = Math.floor((distance % (1000 * 60)) / 1000);
    
        var value = days + "d " + hours + "h " + minutes + "m " + seconds + "s ";
        $el.text(value);
      }
      
      timeUpdate(); // run on instantiation
      var intervalId = setInterval(timeUpdate, 1000); // run every second
    };
    
    $('#my_div').countdown(new Date("Jan 5, 2024 15:37:25").getTime());
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <div id="my_div"></div>