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



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


в функции $.autocompleter плагина есть переменная previousValue в строке 72 распакованной версии jquery.autocomplete.js. Эта переменная устанавливается в пустую строку при инициализации.
Если вы амбициозны, вы можете попробовать отредактировать этот скрипт и проверить, есть ли в текстовом поле уже значение, и установить для него предыдущее значение, если оно есть.
Ну я нашел проблему. Это похоже на Firefox, а не на IE, и технически это не из-за плагина автозаполнения. Это потому, что плагин добавляет атрибут autocomplete = "off" в текстовое поле.
Это сделано для того, чтобы история автозаполнения браузера не конфликтовала с автозаполнением jquery, но в Firefox поля с этим атрибутом не заполняются предварительно, когда пользователь нажимает кнопку «Назад».
Я предполагаю, что нет никакого способа обойти это, похоже, это поведение браузера по умолчанию. Если кто-то знает другое, оставьте комментарий.
На самом деле это ПЛОХОЕ поведение IE, функция «запоминания» должна выполняться с использованием серверного языка.
Некоторые из них (ASP.NET) делают это автоматически, если вы этого не сделаете.
С PHP вам нужно использовать супервары GET или POST.
Если вы не используете какой-либо язык на стороне сервера, вы можете использовать javascript для доступа к строке запроса GET и передавать некоторые параметры между страницами, которые можно использовать для получения значения текстового поля, а затем предварительно заполнить его.
Сегодня у меня была такая же проблема, и я нашел способ ее обойти.
$("#search_form").submit(function() {
$("#location")[0].removeAttribute("autocomplete");
});
Этот код удалит атрибут автозаполнения непосредственно перед отправкой формы. Вам нужно будет изменить селекторы, чтобы они соответствовали вашей форме и входным данным.
Хороший обходной путь! Чтобы быть еще более jQuery-ish, вы можете использовать $('#location').removeAttr('autocomplete'); - это дает вам защиту от нулевых ссылок, если когда-либо был случай, когда #location не находится в html формы.
У меня была такая же идея, но у меня она не сработала. Может быть, потому что я использую список json, загруженный с помощью ajax. В итоге я снова установил значение после загрузки списка.
Ни одно из опубликованных решений не сработало для меня, так как мое приложение с высокой степенью управления AJAX просто кэшировалось в своем последнем известном состоянии перед тем, как покинуть страницу (с autocomplete = "off"), и когда пользователь использовал кнопку возврата, браузер правильно не делал Не вставлять предыдущее значение в поле поиска (так как автозаполнение атрибута было отключено). Таким образом, единственным решением в этом случае было запустить мой JS, и для этого мне пришлось предотвратить кеширование. Я обнаружил, что этот простой фрагмент хорошо работает. Просто вставьте его на свою главную страницу (которую пользователь уйдет при нажатии на любую из ссылок), и вы должны хорошо предотвратить кеширование. Затем используйте JS для заполнения всех желаемых значений, включая значение поля автозаполнения.
window.onbeforeunload = function () {
// Empty function, but it prevents the browser caching this anyway!
}
Хотя код 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');
Хорошая идея, но, к сожалению, текстовое поле не имеет значения, когда я нажимаю на него, прежде чем оно попадет в эту строку, оно уже пустое. Что-то еще должно это очищать