2010-09-05 2 views
1

Я хочу, чтобы текстовое поле всегда было сфокусировано. Когда они выходят из текстового поля, я хочу, чтобы фокус возвращался в текстовое поле.Установить фокус на текстовое поле, когда не сфокусировано

Как бы это сделать с помощью jquery?

$('input').focus(); 

$('input').**unfocused?**(function($) { $('input').focus();}); 
+2

Обработчики событий jQuery не принимают параметр '$'. (Они принимают объект события) – SLaks

+2

Рассматривали ли вы смысл использования текстового поля «всегда сфокусированного»? Я не знаю о вас, но текстовые поля, захватывающие фокус, - это мое личное домашнее животное, ненавидимое в интернете (особенно, когда вы частично можете заполнить форму и прыжки с фокуса в середине печати) –

+0

Да, у меня есть. На всей странице есть только одно поле, и это единственный фокус пользователя. – twodayslate

ответ

0

Следующий код представляет собой альтернативное решение, которое зависит от того, периодически проверять состояние элемента управления.

var controlFocus=false; 
$("#txtName").focus(function(){ 
    $(this).addClass("focused"); 
    if(!controlFocus) { 
     controlFocus = true; 
     setInterval(function(){ 
      var o = $("#txtName"); 
      if(!o.hasClass("focused")) o.focus(); 
     }), 200); 
    } 
}).blur(function(){$(this).removeClass("focused");}); 

После текстового поля (с именем txtName) получает свой первый фокус, каждый 0,2 второго, имеет элементы управления кодами ли текстовое поле фокуса. Если это не так, это сфокусировано. Но это может быть очень неприятно.

+0

Я понимаю идею, но сценарий дает мне ошибки. Кроме того, не будет ли это наращиваться и сделать сайт очень медленным? – twodayslate

+0

Какая ошибка? Фактически я попробовал это на Jsfiddle с Chrome. Вы можете увеличить интервал до 500 или 1000. – Zafer

+0

С консоли ошибок: Ошибка: отсутствует; до выписки Исходный код: }), 200); – twodayslate

3

Вы ищете blur event:

$(':text').blur(function() { this.focus(); }); 
+1

'$ (" input "). Blur (function() { $ (" input "). Focus(); });' не работает – twodayslate

+2

Он прав ... это должно, но это не так. http://jsfiddle.net/pUFAV/ –

0

Привязать для получения события изменения и проверить, следует ли принудительно вводить фокус на этот вход, если вставить некоторые данные в документ. $ (Документ) .data («_ force_focus», e.target)

$('input.force').bind('change', function(e) { 
     if(need_force_focus()) { 
       $(document).data('_force_focus', e.target); 
     } else { 
       $(document).removeData('_force_focus'); 
     } 
    }); 

Теперь на документе связываются с событием focusin, тестирование, если документ имеет данные «_force_focus». Если это так, установите фокус на значение. Это важно, чтобы предотвратить повторное включение фокуса при тестировании на e.target

$(document).bind('focusin', function (e) { 
    var t = $.data(document, '_force_focus'); 
      if(t && e.target !== t) { 
        $(t).trigger('focus'); 
        return false; 
      } 
      return true; 
    });