让浏览器记住动态生成的表单中的输入字段值

时间:2012-02-11 21:18:34

标签: javascript jquery forms browser

如果用户实际点击了“rember page password”(浏览器,而非网站功能),浏览器记住用户和密码信息是正常的。

我有一个使用异步调用生成的登录表单,如:

$('#container').load('/path/file.php?what=login_form');

在这种形式下,即使我点击了“是,请记住密码”,提交时浏览器也不记得(并为我自动填充)。

这是否意味着只会记住可映射的网页表单?

编辑 - 输出示例

 <div class="caja loginBox">
        <form action="index.php" method="post" name="sesion" id="sesion">
        <h1>Inicio de sesion</h1><h2>Usuario</h2>
     <input type="text" id="nombre" name="nombre"/>
     <h2>Password</h2><input type="password" id="pass" name="pass"/><button type="submit" name="inicio">Entrar</button>
     </form> </div>

1 个答案:

答案 0 :(得分:2)

我找到了一个适用于Firefox密码管理器的解决方案。根据您动态加载表单的原因,我的解决方案可能会或可能不会对您有所帮助。 (更多内容见下文。)

首先,在使用相同方法和操作的页面上放置一个不可见的表单(我使用内联样式“display:none”),并包含具有相同名称的字段。你可以将它放在最终将包含真实形式的div下面:

<div id="container"></div>

<div id="fake-form" style="display: none">
    <form action="index.php" method="post">
        <input type="text" name='nombre' class='nombre'/>
        <input type="password" name='pass' class='pass' />
    </form>
</div>

然后,在您的JavaScript中,在加载了真实表单的内容之后,将这些值复制出虚假表单并将它们放入真实表单中:

<script type="text/javascript">
    $(function() {
        $("#container").load("/path/file.php?what=login_form", function() {
            var fakeForm = $("#fake-form");
            $("#nombre").val(fakeForm.find(".nombre").val());
            $("#pass").val(fakeForm.find(".pass").val());
        });
    });
</script>

那就是说,如果你在动态加载实际表单之前花了很多精力在页面上放一个表单,那么为什么不删除最后一步并在页面上开始表单呢? :-)大概你有充分的理由这样做。也许来自服务器的表单有独特的样式信息,或字段旁边的动态错误消息,或者i18n字段名称?

但是,如果您从服务器提取的表单具有针对不同用户而变化的操作,那么我的技巧将无效,因为您在构建隐藏表单时必须事先知道该操作。

如果是这种情况,那么也许你可以反过来尝试我的技巧,并隐藏你从服务器加载的“真实形式”并向用户显示假表格。假表单可以发布到不存在的URL,但是您可以使用JavaScript拦截“假表单”的提交,将用户名和密码复制到不可见的“真实表单”中,在真实表单上调用提交,以及返回false以防止原始表单提交通过。

更新:在考虑了一点之后,我认为我的第二个解决方案不会起作用,因为密码管理员几乎肯定会将用户名和密码与您实际提交的最终URL相关联数据,而不是您最初只是假装提交的表单中的初始操作URL。无论如何,希望我的第一个解决方案足以满足您的需求。