#html #jquery
Вопрос:
Я использую автозаполнение jquery в своей форме, которая возвращает a label
для input
тега и a value
для связанного hidden
тега. Это идеально подходит для поиска, который я выполняю с сохраненными значениями, возвращенными в форму.
Проблема возникает, когда пользователь label
удаляет текст в поле ввода с помощью курсора и оставляет поле пустым. В то время label
как теперь не имеет значения (правильно) hidden
, элемент все еще имеет предыдущее value
значение, которое продолжает использоваться в поиске (неверно). Как мне избавиться от hidden value
ситуации, когда пользователь заполняет данные в соответствующем поле ввода?
$( function() { // Single Select $( "#locations" ).autocomplete({ source: function( request, response ) { // Fetch data $.ajax({ url: "getlocations.php", type: 'post', dataType: "json", data: { search: request.term }, success: function( data ) { response( data ); } }); }, select: function (event, ui) { // Set selection $('#locations').val(ui.item.label); // display the selected text $('#location').val(ui.item.value); return false; }, focus: function(event, ui){ $( "#locations" ).val( ui.item.label ); $('#location').val(ui.item.value); return false; }, }); });
<input name="locationname" id = "locations" value="<? echo $locationname; ?>" placeholder="City ..."> <input type="hidden" id="location" name="location" value="<? echo $location; ?>">
Комментарии:
1. Добро пожаловать в Stack Overflow. Похоже, вы хотите иметь
blur
обратный вызов, который проверяет, является ли значение пустым, и удаляет значение из скрытого элемента. Вам нужно будет назначить.blur()
обратный$("#locations")
вызов элементу, а не в автозаполнении.
Ответ №1:
Рассмотрим следующий пример.
$(function() { // Single Select $("#locations") .blur(function() { if ($(this).val() == "") { $("#location").val(""); } }) .autocomplete({ source: function(request, response) { // Fetch data $.ajax({ url: "getlocations.php", type: 'post', dataType: "json", data: { search: request.term }, success: function(data) { response(data); } }); }, select: function(event, ui) { // Set selection $('#locations').val(ui.item.label); // display the selected text $('#location').val(ui.item.value); return false; }, focus: function(event, ui) { $("#locations").val(ui.item.label); $('#location').val(ui.item.value); return false; }, }); });
<link rel="stylesheet" href="//code.jquery.com/ui/1.13.0/themes/base/jquery-ui.css"> <script src="https://code.jquery.com/jquery-3.6.0.js"></script> <script src="https://code.jquery.com/ui/1.13.0/jquery-ui.js"></script> <input name="locationname" id="locations" value="City 1" placeholder="City ..."> <input type="hidden" id="location" name="location" value="1001">
Если Пользователь очистит значение, а затем покинет поле, blur
произойдет событие. Назначенный обратный вызов очистит скрытое поле.
Комментарии:
1. Спасибо @Twisty. Работает отлично! Я также осознал, что мог бы справиться с этим в сценарии, который вызывает форма, но ваше решение более точное.