2015-05-11 2 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; function 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 для обмена! –

+0

Thanks 271314. Отличная идея. Почти готово. Больше нет дубликатов часов, но он не сбрасывается, если я отменю выбор триггера. Тем не менее, очень ценится. Еще раз спасибо. – user1753631

0

Это простое использование при включении и выключении.

на() -> добавить обработчик evend выключен() -> удалить обработчик события

Пример:

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

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

Если все, что вы хотите, чтобы ограничить mySepsisTimer до 1 раза, вы можете просто использовать флаг в глобальной области.

var onlyOneTimer = 0; 

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

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

Это не «лучшая практика», но это проще всего понять.

Смежные вопросы