如何在输入文本上“处理”浏览器自动完成?

时间:2009-10-25 13:58:37

标签: javascript jquery events autocomplete

我有输入文本登录/密码,我使用我在输入内显示的标签,当输入获得焦点时,标签被隐藏,当输入模糊时,如果值不等于“”标签再次显示,使用focus()/ blur()函数效果很好,但是,我怎么能处理浏览器自动填充,因为change()函数不起作用,因为永远不会获得焦点,是有办法处理这个?

我不想通过将其设置为关闭来禁用自动完成功能,我认为,它对用户来说并不是非常友好。

我想使用计时器,每个 n ms,但我想使用更好的方法。

有什么想法吗?

这是我的剧本:

$('#form-login input.inputbox').focus(
   function()
   {
        $('#label-' + $(this).attr('id')).addClass('hidden');
   }
);

$('#form-login input.inputbox').blur(
   function()
   {
        if ($(this).val() == "")
        {
            $('#label-' + $(this).attr('id')).removeClass('hidden');
        }
   }
);

2 个答案:

答案 0 :(得分:1)

有几个jQuery插件已经这样做了;我推荐this one

要回答您的问题(如果您真的想重新发明轮子),您是在谈论自动完成还是保存登录?

如果您正在谈论自动完成,那么只有在重点关注(AFAIK)时才会发生这种情况,因此您无需担心。

如果您正在讨论已保存的登录信息,我相信它们会在页面加载完成之前或之后填写,因此您可以检查页面加载(或者在{1}}之后的1秒钟)是否该字段是空的。

HTML5有一个新的placeholder attribute来执行此操作,但浏览器尚不支持它。


顺便说一下,您可以使用以下选择器代替为每个标签指定ID:

setTimeout

答案 1 :(得分:-1)

之前我做过这个并使用了window.onload。我建议创建两个处理'焦点'和'模糊'功能的函数,你可以从几个地方调用它们。

function inputFocus( elem )
{
    // hide the label
}

function inputBlur( elem )
{
    // show the label
}

window.onload = function()
{
    // get username/password values first

    if ( username.length > 0 ) {
        // call inputFocus with jQuery object
    }            
    if ( password.length > 0 ) {
        // call inputFocus with jQuery object
    }
}