点击后3秒钟后再次自动点击

时间:2019-05-13 18:02:10

标签: javascript jquery

点击3秒钟后再次自动点击。为什么不工作?

int &n = s1.get();

2 个答案:

答案 0 :(得分:1)

我发现您的代码有两个问题:

首先,您将setTimeout用于回调。 setTimeout返回其生成的计时器的int ID。 因此,基本上您现在拥有的是:

.on('click', selector, 123);

显然不起作用。
如果您希望以后执行代码,请将setTimeout 放入回调中。

.on('click', selector, function() {
  setTimeout(myFunc, 3000);
});

然后您的回调在单击时运行,并生成计时器。

第二,我假设您希望回调中的this引用被单击的对象,而不是window ..因此,您必须将thisArg传递给setTimeout或在setTimeout中定义它父范围..或使用不绑定新thisArg的箭头函数。为简单起见,我建议使用箭头功能。

setTimeout( () => {
  $(this).trigger('click');
}, 3000);

答案 1 :(得分:0)

您需要检测哪个点击事件是手动事件,哪个是自动事件。因此,定义timer变量即可完成这项工作。如果timer等于false,则表示点击是手动操作,如果true是指自动点击。

请注意,当调用setTimeout回调时,this是指窗口,因此您需要存储this是变量(ele

var timer = false;
$(document).on("click", "input[name='submit']", function(e){
  var ele = this;
  // First click
  if (!timer){
    e.preventDefault();
    $(ele).prop("disabled", true)
    setTimeout(function(){
      timer = true;
      $(ele).prop("disabled", false).trigger('click');
    }, 3000)
  // Second click
  } else {
    console.log("Submit form");
  }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="submit" name="submit" value="click">