2012-06-13 100 views
1

我对Javascript(和jQuery)非常陌生。我的JSFiddle真的以最好的方式显示了这个问题。 http://jsfiddle.net/mkLsr/3/如何持续检测焦点是否已设定? (Javascript,jQuery)

我想使它成为一个搜索框文本输入,专注于页面加载,因此用户可以在不点击的情况下键入它。但是,我还希望默认文本在用户点击文本输入时消失,如果他们在没有任何写入的情况下单击文本字段,就会重新出现。

问题是,我在页面上有其他文本输入,并且现在正在运行,如果用户单击其中一个并开始键入,焦点将跳转到最初集中的文本输入。我怎样才能阻止这种情况发生?

我尝试使用if ($('input:focus').size() == 0)来设置它,所以如果没有设置其他焦点,它只会设置焦点。它不工作,因为它不会在页面加载后重新检查吗?我该如何重新检查,还是有其他问题?

我认为一个可以自动输入的搜索框,其中有一个默认文本在打字后会被删除,它的使用方式与您所能获得的一样友好 - 但我真的希望能够不花钱其他输入的用户友好性。

任何帮助,将不胜感激!

*编辑*

凯真的帮了我与他的JavaScript的解决方案,并使用 “占位符” HTML属性。 (http://jsfiddle.net/wgwTC/4/)。

我只是好奇,如果有人知道如何跨浏览器应用它,以便第一个文本输入焦点仍然是,但占位符文本是在那里加载页面。目前它在Chrome中运行,但不支持IE(我使用9)或Firefox(5.0)。如果有跨浏览器解决方案,它可能会帮助其他人在未来的项目中需要相同或相似的功能。

+0

而不是试图编写自己的占位符,请尝试使用这样的事情http://www.hagenburger.net/BLOG/HTML5-Input-Placeholder-Fix-With-jQuery。 html – Dhiraj

+0

@DhirajBodicherla看起来它会工作得很好。该页面指出,它在IE中工作,但是,我似乎无法看到IE 9中的占位符文本。有了这样的警告,它运作良好。 对Kai这个脚本有明显的优势吗? – jporcenaluk

回答

1

下面是一个使用了placeholder属性,但将回退到JS为IE < = 9的解决方案:(对工作示例见http://jsfiddle.net/wgwTC/2/):

// Focus on this box by default 
$('#header-search-box').focus(); 

// Support placeholder text for IE <= 9 (which doesn't support placeholder attribute) 
if ($.browser.msie && (parseInt($.browser.version, 10) <= 9)) { 
    $('input[name=search]').attr('value', 'Search New Equipment...'); 

    // Set placeholder text on blur 
    $('input[name=search]').on('blur', function (e) { 
     if (!e.currentTarget.value.length) { 
      e.currentTarget.value = 'Search New Equipment...'; 
     } 
    });  

    // Clear placeholder text on focus 
    $('input[name=search]').on('focus', function (e) { 
     if (e.currentTarget.value === 'Search New Equipment...') { 
      e.currentTarget.value = ''; 
     } 
    }); 
} 
+0

我接受这个答案!它在Chrome中运行得非常好,在其他浏览器中可以很好地工作,并且对于我正在构建的应用程序而言,这样可以很好。凯非常感谢你! – jporcenaluk

+0

不客气!乐意效劳。 – Kai

0

我认为这确实你问(假设我正确理解你)。

这里的小提琴:中http://jsfiddle.net/jVvX3/2/

+0

这比我的工作更好,也就是说,它将第一个项目放在焦点上。但是,如果用户点击该项目,然后再次点击而不删除该文本,则不会自动删除(至少在Chrome中)。不过谢谢您解决第一部分问题! – jporcenaluk