当用户点击回来时,停止忘记文本的jQuery自动完成插件

时间:2009-01-14 00:48:46

标签: javascript jquery browser autocomplete

我正在使用jQuery autocomplete plugin获取位置列表,效果很好。但是,如果用户在使用自动填充文本框提交页面后单击浏览器的后退按钮,则文本框为空。如果我从文本框中取出自动完成功能并提交&点击它会记住文字。

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

6 个答案:

答案 0 :(得分:12)

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

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

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

答案 1 :(得分:9)

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

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

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

答案 2 :(得分:2)

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

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

答案 3 :(得分:0)

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

  window.onbeforeunload = function () {
    // Empty function, but it prevents the browser caching this anyway!
  }

答案 4 :(得分: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');

答案 5 :(得分:-3)

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

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

使用PHP,您需要使用GET或POST supervars。

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