jQuery移动按钮单击处理程序触发两次?

时间:2014-01-10 19:48:15

标签: jquery jquery-mobile

这是代码......简单(现在全局定义的变量)。我第一次点击它按预期工作...第二次严重导致事件连续两次发射,这是我现在想要的......任何想法???

$(document).on("vclick", "#timer", function() {

  console.log(past_ts);
  if(past_ts === 0) {
    past_ts = new Date().getTime();
    $(this).text("Stop Set Timer");
  }
  else {
    curr_ts = new Date().getTime();
    diff_ts = ((curr_ts - past_ts) / 1000);

    past_ts = 0; // Reset timer

    $(this).text("Start Set Timer");

  }
});

1 个答案:

答案 0 :(得分:6)

简单。我有两种方法可以解决这个问题。

1)在打开功能后使用e.stopImmediatePropagation()(第二行)。请务必传递事件参数。

$(document).on("vclick", "#timer", function(e) {
                                      //    ^ note this param
  e.stopImmediatePropagation();

  console.log(past_ts);
  if(past_ts === 0) {
    past_ts = new Date().getTime();
    $(this).text("Stop Set Timer");
  }
  else {
    curr_ts = new Date().getTime();
    diff_ts = ((curr_ts - past_ts) / 1000);

    past_ts = 0; // Reset timer

    $(this).text("Start Set Timer");

  }
});

可在此处找到文档: http://api.jquery.com/event.stopimmediatepropagation/

OR

2)尝试使用off().on()技术。这可以确保如果您已经绑定了行为,它将解除绑定,然后重新绑定。

$(document).off("vclick", "#timer").on("vclick", "#timer", function() {

  console.log(past_ts);
  if(past_ts === 0) {
    past_ts = new Date().getTime();
    $(this).text("Stop Set Timer");
  }
  else {
    curr_ts = new Date().getTime();
    diff_ts = ((curr_ts - past_ts) / 1000);

    past_ts = 0; // Reset timer

    $(this).text("Start Set Timer");

  }
});