Запретить плагину автозаполнения jQuery забыть текст, когда пользователь щелкает обратно

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

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

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
9
0
4 918
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

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

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

Хорошая идея, но, к сожалению, текстовое поле не имеет значения, когда я нажимаю на него, прежде чем оно попадет в эту строку, оно уже пустое. Что-то еще должно это очищать

Glenn Slaven 14.01.2009 04:15
Ответ принят как подходящий

Ну я нашел проблему. Это похоже на 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 формы.

Jarrod Dixon 01.12.2009 07:20

У меня была такая же идея, но у меня она не сработала. Может быть, потому что я использую список json, загруженный с помощью ajax. В итоге я снова установил значение после загрузки списка.

digao_mb 11.06.2014 20:28

Ни одно из опубликованных решений не сработало для меня, так как мое приложение с высокой степенью управления 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');

Другие вопросы по теме