Остановите плагин автозаполнения jQuery, чтобы забыть текст, когда пользователь нажимает назад - PullRequest
9 голосов
/ 14 января 2009

Я использую плагин jQuery для автозаполнения , чтобы получить список местоположений, который работает нормально. Но если пользователь нажимает кнопку возврата браузера после отправки страницы с текстовым полем автозаполнения, текстовое поле будет пустым. Если я уберу автозаполнение из текстового поля и отправлю и нажму обратно, он запомнит текст.

Есть ли способ запретить автозаполнению очистку текстового поля при загрузке страницы?

Ответы [ 6 ]

12 голосов
/ 30 сентября 2009

У меня была та же проблема сегодня, и я нашел способ обойти это.

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

Этот код удалит атрибут автозаполнения непосредственно перед отправкой формы. Вам нужно будет изменить селекторы так, чтобы они соответствовали вашей форме и вводу (-ям).

9 голосов
/ 14 января 2009

Ну, я нашел проблему. Похоже, что на Firefox, а не IE, и это не технически из-за плагина автозаполнения. Это потому, что плагин добавляет атрибут autocomplete="off" в текстовое поле.

Это так, что история автозаполнения браузера не конфликтует с автозаполнением jquery, но в Firefox поля, имеющие этот атрибут, не заполняются предварительно, когда пользователь нажимает кнопку возврата.

Я полагаю, что нет способа обойти это, похоже, это поведение браузера по умолчанию. Если кто-то знает другое, пожалуйста, оставьте комментарий.

2 голосов
/ 14 января 2009

в функции $.autocompleter плагина есть переменная с именем previousValue в строке 72 распакованной версии jquery.autocomplete.js. Эта переменная устанавливается на пустую строку при инициализации.

Если вы чувствуете себя честолюбивым, вы можете попробовать отредактировать этот скрипт и проверить, если текстовое поле уже имеет значение, и установить для него значение предыдущего значения, если оно есть.

0 голосов
/ 11 сентября 2011

Хотя код 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');
0 голосов
/ 12 февраля 2010

Ни одно из опубликованных решений не сработало для меня, поскольку мое приложение с высоким уровнем AJAX просто кэшировалось в своем последнем известном состоянии перед тем, как покинуть страницу (с autocomplete = "off"), а когда пользователь использовал кнопку "Назад", браузер правильно не вставил предыдущее значение в поле поиска (поскольку автозаполнение атрибута было отключено). Таким образом, единственное решение в этом случае состояло в том, чтобы запустить мой JS, и для этого мне пришлось предотвратить кэширование. Я нашел этот простой фрагмент, чтобы хорошо работать. Просто вставьте его на свою главную страницу (которую пользователь уйдет при переходе по любой из ссылок), и вы должны довольно хорошо предотвратить кеширование. Затем используйте JS для заполнения всех значений, которые вы хотите, включая значение поля автозаполнения.

  window.onbeforeunload = function () {
    // Empty function, but it prevents the browser caching this anyway!
  }
0 голосов
/ 11 марта 2009

Это на самом деле плохое поведение IE, функция «запоминания» должна быть сделана с использованием языка на стороне сервера.

Некоторые из них (ASP.NET) делают это автоматически, если вы не запретили.

В PHP вам нужно использовать супервары GET или POST.

Если вы не используете какой-либо язык на стороне сервера, вы можете использовать javascript для доступа к строке запроса GET и передачи некоторых параметров между страницами, которые можно использовать для получения значения текстового поля, а затем предварительно заполнить его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...