2010-09-05 117 views
1

我想要始终关注文本字段。当他们点击文本框时,我想让焦点回到文本框。当未聚焦时将焦点设置在文本字段

我该如何用jquery完成此任务?

$('input').focus(); 

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

jQuery事件处理程序不会接受'$'参数。 (他们采取事件对象) – SLaks 2010-09-05 02:27:02

+2

您是否考虑过制作“永远集中”文本字段的可用性含义?我不知道你,但文本框抓住焦点是我在互联网上的个人宠物仇恨之一(特别是当你填写表格和焦点中间打字的部分方式) – 2010-09-05 02:27:43

+0

是的,我有。整个页面只有一个字段,这是用户的唯一焦点 – twodayslate 2010-09-05 03:00:56

回答

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 2010-09-05 09:02:25

+0

什么是错误?事实上,我在Jsfiddle上用Chrome试了一下。您可以将间隔增加到500或1000. – Zafer 2010-09-05 09:52:28

+0

从错误控制台:错误:缺少;在声明之前 源代码: }),200); – twodayslate 2010-09-12 00:38:57

3

您正在寻找的blur event

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

'$(“input”)。blur(function(){ $(“input”)。focus(); });'不起作用 – twodayslate 2010-09-05 02:28:45

+2

他是对的......它应该,但它没有。 http://jsfiddle.net/pUFAV/ – 2010-09-05 02:34:31

0

绑定以获取更改事件,并检查焦点是否必须强制输入此输入,如果是这样,请在文档中插入一些数据。 $(文件)。数据(“_ 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; 
    });