如何连续检测焦点是否已设定? (Javascript,jQuery)

时间:2012-06-13 18:25:00

标签: javascript jquery html

我是Javascript(和jQuery)的新手。我的JSFiddle真正以最好的方式展示了这个问题。 http://jsfiddle.net/mkLsr/3/

我正在努力使其成为一个专注于页面加载的搜索框文本输入,因此用户可以在不点击它的情况下输入它。但是,我还希望其中的默认文本在用户单击文本输入时消失,如果他们单击文本字段而不写任何内容则会重新显示。

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

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

我认为你可以自动键入的搜索框,其中包含一个在输入时被删除的默认文本,就像你可以获得的用户友好一样 - 但我真的希望这样做而不花费其他费用输入的用户友好性。

任何帮助将不胜感激!

*编辑 *

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

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

2 个答案:

答案 0 :(得分:1)

这是一个使用placeholder属性的解决方案,但是会回退到JS for 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 = '';
        }
    });
}

答案 1 :(得分:0)

我认为这符合你的要求(假设我理解正确)。

这是小提琴:http://jsfiddle.net/jVvX3/2/