9

我正在使用jQuery 自动完成插件来获取位置列表,效果很好。但是,如果用户在提交带有自动完成文本框的页面后单击浏览器的后退按钮,则文本框为空。如果我从文本框中取消自动完成并提交并单击返回,它会记住文本。

有没有办法在页面加载时阻止自动完成清除文本框?

4

6 回答 6

12

我今天遇到了同样的问题,并找到了解决方法。

$("#search_form").submit(function() {
    $("#location")[0].removeAttribute("autocomplete");
});

此代码将在提交表单之前删除自动完成属性。您将不得不更改选择器,以使它们与您的表单和输入相匹配。

于 2009-09-30T19:11:56.163 回答
9

好吧,我发现了这个问题。它似乎在 Firefox 上,而不是 IE 上,而且在技术上不是由于自动完成插件。这是因为插件将属性添加autocomplete="off"到文本框。

这样浏览器的自动完成历史不会与 jquery 的自动完成冲突,但在 Firefox 中,当用户单击后退按钮时,不会预先填充具有此属性的字段。

我猜没有办法解决这个问题,它似乎是默认的浏览器行为。如果有人知道不同,请发表评论。

于 2009-01-14T01:36:41.357 回答
2

$.autocompleter插件的函数中,有一个变量previousValue在解压缩版本的第 72 行调用jquery.autocomplete.js。此变量在初始化时设置为空字符串。

如果您有野心,您可以尝试编辑此脚本并检查文本框是否已经有值,如果有,则将 previousValue 设置为它。

于 2009-01-14T01:06:26.347 回答
0

发布的所有解决方案都不适合我,因为我的高度 AJAX 驱动的应用程序只是在离开页面之前以其最后一个已知状态缓存(使用 autocomplete="off"),并且当用户使用后退按钮时,浏览器正确地没有'不要将前一个值插入搜索字段(因为属性自动完成设置为关闭)。因此,在这种情况下,唯一的解决方案是让我的 JS 运行,为此我必须防止缓存。我发现这个简单的片段效果很好。只需将其插入您的主页(用户在单击任何链接时都会离开),您应该可以很好地防止缓存。然后使用 JS 填充所有你想要的值,包括自动完成字段的值。

  window.onbeforeunload = function () {
    // Empty function, but it prevents the browser caching this anyway!
  }
于 2010-02-12T10:07:49.893 回答
0

尽管 heyman & Glenn 的代码有效,但在提交后仍显示表单时禁用提交可能还不够,例如因为它使用 AJAX 更新页面的另一部分。此外,当使用另一个链接(不提交表单)离开页面时,会保留自动完成属性,使用后退按钮将删除输入的值。

我使用下面的代码来解决这个问题。它仅在输入元素处于活动状态(具有焦点)时添加自动完成属性。我已将属性的删除和添加放在命名函数中,因为我有多个具有不同设置的自动完成字段。如果您只有一个自动完成字段,您可以将函数体放在事件语句中。

var autoCompleteFixSet = function() {
    $(this).attr('autocomplete', 'off');
};
var autoCompleteFixUnset = function() {
    $(this).removeAttr('autocomplete');
};

$('#elem').autocomplete({
    minLength : 1,
    source: '/values.php'
}).focus(autoCompleteFixSet).blur(autoCompleteFixUnset).removeAttr('autocomplete');
于 2011-09-11T14:57:21.727 回答
-3

这实际上是 IE 的一种不良行为,“记住”功能应该使用服务器端语言来完成。

其中一些(ASP.NET)会自动执行此操作,除非您告诉不要这样做。

使用 PHP,您需要使用 GET 或 POST 超级变量。

如果您不使用任何服务器端语言,则可以使用 javascript 访问 GET 查询字符串,并在页面之间传递一些参数,这些参数可用于获取文本框值,然后预填充它。

于 2009-03-11T17:50:33.273 回答