双击速度有多快?

时间:2011-12-25 18:15:14

标签: javascript double-click

我有以下JS代码

$('#dialog').dialog({
  ...
  buttons: {
    OK: function() {
      callAjax({"some":"param"});
      $('#dialog').dialog('close');
    }
  }
});

var ajaxBatch = [];

function callAjax(cmd) {
  ajaxBatch.push(cmd);
  if (ajaxBatch.length == 1)
    setTimeout(ajaxItself, 1);
}

function ajaxItself() {
  ajaxBatch.push({"minor":"data"});
  $.post('url', { msg: JSON.stringify(ajaxBatch) });
  ajaxBatch = [];
}

理论上我应该总是[{"some":"param"},{"minor":"data"}]

但我常常在[{"some":"param"},{"some":"param"},{"minor":"data"}]的错误请求中收到错误日志条目。

这样的事情怎么会发生?使用2x按钮的A4鼠标在这里有意义,还是什么?

顺便说一句,我无法重现这种情况,我只是在日志中看到它。并且用户代理也不受特定浏览器的限制。

1 个答案:

答案 0 :(得分:1)

浏览器可能排队了超过1次点击事件,因此无论该按钮是否可见,以便他们继续点击,事件已经启动。

也许在OK:函数

中设置一个标记
if (!dialogIsClosed) {
      callAjax({"some":"param"});
      $('#dialog').dialog('close');
      dialogIsClosed = true;
}

我认为浏览器会选择处理事件队列中的项目而不是处理setTimeout队列中的项目。