2012-06-07 2 views
0

Я пытаюсь определить, потеряет ли окно фокус после 3 секунд отправки.Включить, через X секунд, если размытие окна

В настоящее время у меня это:

$("input").on("submit",function(){ 
$(window).blur(function(){ 
    console.log(a); 
}) 
}); 

Но это, независимо от того, когда вы нажимаете представить, если вы щелкните за пределами окна или свернуть в окно console.log запускающее a.

Это то, что я пытаюсь достичь:

  1. Пользователь представляет форму
  2. В течение 3-х секунд, если окно теряет фокус делать console.log (а);
  3. Через 3 секунды, если окно теряет фокус ничего не делать.
  4. Если пользователь снова подает на той же сессии, повторите процедуру с шага 1.
+0

Я смущен о том, что вы пытаетесь сделать. Вы хотите, чтобы функция размытия срабатывала, если окно размыто через 3 секунды? –

+0

Когда вы отправляете, если через 3 секунды окно теряет фокус, запустите console.log (a) – jQuerybeast

+0

И после 3 секунд вы не хотите, чтобы размытие срабатывало? –

ответ

2

Попробуйте это:

$("#form").on("submit",function(){ 
    var blurFunc = function() { 
     console.log(a); 
    } 

    $(window).blur(blurFunc); 
    setTimeout(function() { $(window).unbind('blur', blurFunc); }, 3000); 
}); 

setTimeout вызов будет отвязать от события размытия через 3 секунды, в результате чего событие не срабатывает.

Для получения дополнительной информации о setTimeout смотрите здесь: http://www.elated.com/articles/javascript-timers-with-settimeout-and-setinterval/

В качестве альтернативы, вы могли бы сделать что-то вроде этого:

$("#form").on("submit",function(){ 
    var submitted = true; 

    var blurFunc = function() { 
     if(submitted) { 
      console.log(a); 
     } 
    } 

    $(window).blur(blurFunc); 
    setTimeout(function() { submitted = false; }, 3000); 
}); 
+0

Возможно, я неправильно понял, но я думал, что они хотят, чтобы это было наоборот: «Размытие» ничего не должно делать, если оно находится в пределах трех секунд, иначе оно должно делать что угодно. –

+0

Я бы не хотел использовать bind или unbind. Вот почему я не использовал этот метод. Я знаю, что такое setTimeout, но я не был уверен, что это лучший или более эффективный способ сделать это. – jQuerybeast

+0

@ AnthonyGrist просмотреть комментарии к вопросу OP. –