2015-05-11 128 views
0

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

$('#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(); 
}} 
+2

'var running = false;函数foo(){if!running {do stuff}}'? –

+1

你应该发布'mySepsisTimer()'方法本身 –

回答

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(); 
    } 
} 
+0

我不知道这个方法,thx for sharing! –

+0

谢谢271314.好主意。差不多了。没有更多的重复时钟,但它不会重置,如果我取消选择一个触发选项。不过,非常感谢。再次感谢。 – user1753631

0

使用on和off很简单。

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

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

如果你想要的是: - >添加evend处理掉() - >删除事件处理

上()

为了将mySepsisTimer限制为1次,您可以简单地在全局范围上使用一个标志。

var onlyOneTimer = 0; 

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

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

这不是一个“最佳实践”解决方案,但它是最容易理解的。