【问题标题】:setTimeout not working on my onlick eventsetTimeout 不适用于我的 onclick 事件
【发布时间】:2017-08-11 13:33:37
【问题描述】:

我只需要在点击按钮 5 秒后运行一个函数。

控制台向我显示此消息:

VM9200:1 Uncaught ReferenceError: getId is not defined at :1:1

function getId() {
  $.getJSON("https://maxtechglobal.com/vencimientos/perfil/perfil.php?cuit="+$("#cuit").val(), function(result){
    for (var i = 0; i < result.data.length; i++) {
      $.each(result.data[i].perfil, function( index, value ) {
        var id = result.data[i].perfil.id;
        $("#idPerfil").val(id);
      });
    }
  });
}
&lt;button id="btnBuscar" onclick="setTimeout('getId()', 5000);" type="button" class="btn btn-primary text-center" name="button"&gt;Buscar&lt;/button&gt;

我证明了这一点:setTimeout(getId, 5000); 和这个 setTimeout("getId();", 5000); 和这个:setTimeout('getId', 5000);

但是什么都行

【问题讨论】:

  • getId() 需要在使用on* 事件属性时在窗口范围内声明。我打赌你已经把它放在了 document.ready 处理程序下。另请注意,您可以通过将函数引用传递给超时来改进代码:setTimeout(getId, 50000);
  • 该代码应该可以工作,但没有引用 jQuery。我的猜测是这不是您的实际代码,并且您的实际代码有一个文档准备好的包装器

标签: javascript jquery function settimeout


【解决方案1】:

给你一个解决方案

$('#btnBuscar').click(function(){
  setTimeout(function(){
    $.getJSON("https://maxtechglobal.com/vencimientos/perfil/perfil.php?cuit="+$("#cuit").val(), function(result){
      for (var i = 0; i < result.data.length; i++) {
        $.each(result.data[i].perfil, function( index, value ) {
          var id = result.data[i].perfil.id;
          $("#idPerfil").val(id);
        });
      }
    });
  }, 5000);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="btnBuscar" type="submit" class="btn btn-primary text-center" name="button">Buscar</button>

由于你是jQuery,所以我使用了jQueryclick事件。

$('#btnBuscar').click(function(){});

我在 click 方法中使用了 setTimeout 并在其中添加了代码行(而不是关闭另一个函数)。

【讨论】:

  • 请添加对您给出的答案的描述。这不是我第一次看到你这样做。重复回答并不能教育任何人。
  • @RoryMcCrossan 谢谢。我加了,但我在想怎么放。
【解决方案2】:

getId() 需要在使用on* 事件属性时在窗口范围内声明。我打赌你已经把它放在了 document.ready 处理程序下。

还请注意,您可以通过将函数 reference 传递给超时并使用不显眼的事件处理程序而不是过时的 on* 属性来改进代码并避免此问题。试试这个:

function getId() {
  console.log('called!');

  // your AJAX logic here...
}

$(function() {
  $('#btnBuscar').click(function() {
    setTimeout(getId, 5000);
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="btnBuscar" type="button" class="btn btn-primary text-center" name="button">Buscar</button>

【讨论】:

  • 迄今为止最好的解决方案。
【解决方案3】:

你在这里 - 工作示例

function getId() {
  alert('function');
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="btnBuscar" onclick="setTimeout(getId, 3000);" type="button" class="btn btn-primary text-center" name="button">Buscar</button>

【讨论】:

    【解决方案4】:

    setTimeout 接受对函数的引用作为第一个参数。 这可以是函数的名称:

    function explode(){
       console.log('called!');
    }
    setTimeout(explode, 5000);
    

    引用函数的变量:

    var explode = getId(){
       console.log('called!');
    };
    setTimeout(explode, 5000);
    

    或匿名函数:

    setTimeout(getId(){
       console.log('called!');
    }, 5000);
    

    也可以传递 setTimeout 一个代码字符串让它执行:

    setTimeout("console.log('called!');", 5000);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-24
      • 2019-01-08
      • 1970-01-01
      相关资源
      最近更新 更多