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

jQuery移动按钮点击处理程序触发两次?,jquery,jquery-mobile,Jquery,Jquery Mobile,下面是代码…很简单(现在全局定义变量)。我第一次点击它就如预期的那样工作……第二次howvere导致事件连续触发两次,这就是我现在想要的……有什么想法吗 $(document).on("vclick", "#timer", function() { console.log(past_ts); if(past_ts === 0) { past_ts = new Date().getTime(); $(this).text("Stop Set Timer"); }

下面是代码…很简单(现在全局定义变量)。我第一次点击它就如预期的那样工作……第二次howvere导致事件连续触发两次,这就是我现在想要的……有什么想法吗

$(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) 在打开功能(第二行)后使用
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");

  }
});
文档可在此处找到:

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");

  }
});

完美…这就像一个符咒,但为什么我首先需要这么做???@Alex.Barylski当您调用$.on()时,您将一个事件绑定到ID。每次连续调用$.on(),它都会添加重复绑定(即多个)。通过使用e.stopImmediatePropagation(),它检测到已经分配了绑定,并阻止再次添加。好的,我将其更改为$(“#timer”)。单击(函数(e)…这似乎仍然是必需的…无论如何,它工作得很好,谢谢:)现在是否有任何方法可以锁定屏幕以防止更改,除非“停止”按下按钮:p@Alex.Barylski对,这是因为$.click(handler)只是$.on('click',handler)的快捷方式。jQuery文档是您在这方面的朋友:)。链接:@Alex.Barylski很高兴能帮忙!如果您觉得答案有用,请记住接受它。您是否在
pageinit
或任何其他事件中包装代码?