事件执行两次,而不是执行一次

时间:2019-01-09 18:59:25

标签: javascript jquery

点击5,它将变成7-9-11 ...

我希望6-7-8 ...

有帮助吗?

function go_plus(e) {
  let obj = $(e.target);
  let a = parseInt(obj.text());
  a += 1;
  obj.text(a);
}

var setint = '';

function go_spinn(e) {
  setint = setInterval(function() {
    go_plus(e);
  }, 79);
}

$('#count').on('mouseleave mouseup', function() {
  clearInterval(setint);
});
#count {
  cursor: pointer;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<div id='count' onclick='go_plus(event)' onmousedown='go_spinn(event)'>5</div>

2 个答案:

答案 0 :(得分:3)

所以问题是您可以“缓慢单击”东西-按住鼠标一两秒钟,然后放开鼠标,仍然会导致单击。

解决问题的最佳方法是在go_spin开始之前设置一个超时,单击该超时即可清除。

缺点是go_spinn的启动速度不快-也就是说,在go_spinn开始之前,您需要按住鼠标直到超时,例如200ms 。测试一下,您也许可以将其放回一点点(至150ms左右)以实现所需的功能。

编辑:顺便说一句,我只是在假设您要实现的目标-您实际上在尝试使用此代码实现什么?

function go_plus(e){
  let obj = $(e.target);
	let a = parseInt(obj.text());
  a += 1;
  obj.text(a);
}

var setint = '';
var startspin;

function go_spinn(e){
  startspin = setTimeout(function() {
    setint = setInterval(function(){go_plus(e);}, 79);
  },200);

}

$('#count').on('click mouseleave mouseup', function(){
   clearInterval(setint);
   clearInterval(startspin);
});
#count{
cursor:pointer;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<div id='count' onclick='go_plus(event)' onmousedown='go_spinn(event)'>5</div>

答案 1 :(得分:1)

只需将您的html代码更改为<div id='count' onmousedown='go_spinn(event)'>5</div>,以便删除onclick事件。