2015-05-11 169 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(); 
}} 

這不是一個「最佳實踐」解決方案,但它是最容易理解的。