jquery阻止函数运行多次

时间:2015-05-11 18:34:33

标签: jquery function

mySepsisTimer(一个简单的倒数计时器)在达到选项选择标准(sepsis-six-sirs)时启动。但是,如果用户在启动计时器功能后单击另一个选择选项,则还会运行重复的时钟。如何防止mySepsisTimer函数多次运行,或者如果用户单击(或取消选择)另一个(sepsis-six-sirs)选项,则可以重置它。

$('#sepsis-six-sirs input[type=checkbox]').change(function(){
recalculateThisIsSepsis();
});

function recalculateThisIsSepsis(){
var sum = 0;
$("#sepsis-six-sirs input[type=checkbox]:checked").each(function(){
    sum+=parseInt($(this).val());
});

if (sum > 1) {
    mySepsisTimer();
}}

3 个答案:

答案 0 :(得分:1)

尝试使用$.Callbacks("once")

var callbacks = $.Callbacks("once");

callbacks.add(mySepsisTimer);

$('#sepsis-six-sirs input[type=checkbox]').change(function() {
  recalculateThisIsSepsis();
});

function recalculateThisIsSepsis(){
  var sum = 0;
  $("#sepsis-six-sirs input[type=checkbox]:checked").each(function() {
    sum+=parseInt($(this).val());
  });

  if (sum > 1) {
    callbacks.fire();
  }
}

答案 1 :(得分:0)

使用开关很简单。

on() - >添加一个evend处理程序off() - >删除事件处理程序

示例:

$("#item li").on('click', function () {
    $(this).text('ITEM CLICKED')
    alert('CLICKED');

    //remove the event
    $(this).off("click")
});

答案 2 :(得分:0)

如果您只想将mySepsisTimer限制为1次,则可以在全局范围内使用标记。

var onlyOneTimer = 0;

// ... The rest of your code ...

if (sum > 1 && onlyOneTimer == 0) {
     onlyOneTimer = 1;
     mySepsisTimer();
}}

这不是“最佳实践”解决方案,但它是最简单的理解。