2012-04-27 1 views
4

Я пытаюсь сделать расширение сафари, которое что-то делает, если фокус курсора не находится в текстовом поле. Однако следующий код для определения того, находится ли фокус в текстовом поле, не работает.Код Javascript для определения фокуса в текстовом поле

if ($(document.activeElement).attr("type") != "text" 
     && $(document.activeElement).attr("type") != "textarea") { 
      ..do something 
    } 
+0

Дубликат: http://stackoverflow.com/questions/497094/how-do-i-find-out-which-javascript-element -has-focus – WilHall

+0

'textarea' не является значением атрибута' type' - это имя тега. Вероятно, вы хотели проверить 'document.activeElement.localName ==« textarea »' (да, иногда вещи проще jQuery). –

+0

'localName' не реализовано в IE 8 или ниже. Лучше (совместимо с большим количеством браузеров) использовать 'tagName.toLowerCase() == 'textarea'' – RobG

ответ

13

Просто держать его просто:

var el = document.activeElement; 

if (el && (el.tagName.toLowerCase() == 'input' && el.type == 'text' || 
    el.tagName.toLowerCase() == 'textarea')) { 
    // focused element is a text input or textarea 
} 
1

Вы можете использовать JQuery для того чтобы достигнуть этого

$('input[type="text"]').focus(function() { 
    alert('Focused'); 
}); 
-2
$("input[type=text]").filter(":not(:focus)").css("background","#ff0000"); 

$("input[type=text]").focus(function(){ 
    $(this).css("background","#ffffff"); 
}); 

$("input[type=text]").blur(function(){ 
    $(this).css("background","#ff0000"); 
}); 

Если установить все фоне неактивного INPUTs' на красный. (Работал в Chrome 18)