2013-06-19 2 views
0

Я не могу успешно использовать .focus() из события focusout, на том же элементе. Я тоже пробовал это с помощью setTimeout. Есть идеи?.focus() не работает изнутри .focus() event

$(control).focusout(function (e) { 
        if ($(this).val().length > 0) { 
         for (var ii = 0; ii < sampleDTOList.length; ii++) { 
          if (sampleDTOList[ii]["controlId"] == $(this).attr("id")) { 
           if ($(this).val() <= parseFloat(sampleDTOList[ii]["maxValue"]) && $(this).val() >= parseFloat(sampleDTOList[ii]["minValue"])) { 
            sampleDTOList[ii]["value"] = $(this).val(); 
            RunRulesOnSample(sampleDTOList[ii]); 
            return; 
           } 
           else { 
            $(this).val(""); 
            alert("You must enter a value between " + sampleDTOList[ii]["minValue"] + " and " + sampleDTOList[ii]["maxValue"] + "."); 
            $(this).focus(); 
            return; 
           } 
          } 
         } 
        } 
       }); 
+1

в центре внимания из вы хотите, чтобы снова сосредоточиться на основе состояния !! – zod

ответ

0

Я думаю, что невозможно напрямую вызвать функцию фокусировки на обработчик события фокусировки. Кроме того, вы не можете сказать preventDefault() для объекта события, потому что событие фокуса не отменяется.

Но, кажется, вы можете использовать функцию SetTimeout:

$('#foo').focusout(function(e) { 
    setTimeout(function() { 
     $('#foo').focus(); 
    }, 10); 
}); 

проверить это jsFiddle.

И вы также можете найти обходной путь, который использует mousedown событие here